看他們好像都做過這道題,我看了幾次沒看明白題目意思(英語是硬傷。。。。)今天和菜鳥啟航在那兒調侃呢,想起這道題就給做了。
水貪心一道。對每一組數據按照價格排序,先選便宜的,再選貴的。
[cpp] #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1005
struct node
{
int x,y;
double pri;
}a[N];
int cmp(const void *a,const void *b)
{
return (*(node *)a).pri>(*(node *)b).pri?1:-1;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),m!=-1&&n!=-1)
{
int i;
for(i=0;i<m;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
if(a[i].x==0)
{
a[i].pri=10000000;
continue;
}
a[i].pri=1.0*a[i].y/a[i].x;
}
qsort(a,m,sizeof(a[0]),cmp);
double ans;
ans=0;
for(i=0;i<m;i++)
{
if(n>a[i].y)
{
ans+=a[i].x;
n-=a[i].y;
}
else if(n==a[i].y)
{
ans+=a[i].x;
break;
}
else
{
ans+=1.0*n*a[i].x/a[i].y;
break;
}
}
printf("%.3f\n",ans);
}
return 0;
}