#include"stdio.h" #include"stdlib.h" struct ln { int j,f; double p; }s[1005]; int cmp(const void *a,const void *b) { return (*(ln*)a).p>(*(ln*)b).p?1:-1; } int main( ) { int m,n,i; double sum,sun; while(scanf("%d%d",&m,&n)&&(m!=-1||n!=-1)) { sum=sun=0; for(i=0;i<n;i++) { scanf("%d%d",&s[i].j,&s[i].f); if(s[i].j==0) s[i].p=s[i].f; else s[i].p=(s[i].f*1.0)/s[i].j; } qsort(s,n,sizeof(ln),cmp); for(i=0;i<n;i++) { if(sun+s[i].f>m) break; sum+=s[i].j; sun+=s[i].f; } if(s[i].f!=0&&i!=n)//这里要注意,i==n的情况不合适,太坑爹了,这里居然忘了! sum+=(m-sun)/s[i].f*s[i].j; printf("%.3lf\n",sum); } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=1009
贪心题
代码如下: