看他们好像都做过这道题,我看了几次没看明白题目意思(英语是硬伤。。。。)今天和菜鸟启航在那儿调侃呢,想起这道题就给做了。
水贪心一道。对每一组数据按照价格排序,先选便宜的,再选贵的。
[cpp] #include
#include
#include
#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
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
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;
}