这是一个贪心问题,
#include<cstdio>#include<algorithm>using namespace std;#define MAX 1001struct node{ double j,f,c;}num[MAX];int n;double m; bool cmp(const struct node &a,const struct node &b){ return b.c>a.c;}int main(){ while(~scanf("%lf%d",&m,&n)) { if(m==-1&&n==-1) break; for(int i=0;i<n;++i) { scanf("%lf%lf",&num[i].j,&num[i].f); num[i].c=num[i].f/num[i].j; } sort(num,num+n,cmp); double sum=0.0; for(int i=0;i<n;i++) { if(m<=0) break; if(m>=num[i].f) { sum+=num[i].j; m-=num[i].f; } else{ sum+=(num[i].j*(m/num[i].f)); m=0; } } printf("%.3f\n",sum); } return 0;}
