http://acm.hdu.edu.cn/showproblem.php?pid=1009
无聊的贪心

#include <stdio.h> #include <stdlib.h> typedef struct L{ int j,k; double w; }L; L kk[1001]; int cmp(const void*a,const void*b) { L*c=(L*)a; L*d=(L*)b; return d->w > c->w ? 1 : -1 ; } int main() { int m,n; while(scanf("%d%d",&m,&n)) { if(m==-1 && n==-1)break; for(int i=0;i<n;i++) { scanf("%d%d",&kk[i].j,&kk[i].k); kk[i].w=kk[i].j*1.0/kk[i].k; } qsort(kk,n,sizeof(L),cmp); int sum=0; double ans=0; for(int i=0;i<n;i++) { sum+=kk[i].k; ans+=kk[i].j; if(sum>=m){ ans-=(sum-m)*kk[i].w; break; } } printf("%.3lf\n",ans); } return 0; }