1 7 2 3 3 4 4
2.33
思路:先将单价排序,如果相同就排数量,将每种大米所需的总价格算出来,如果小于预算循环继续,大于预算就减去超出的部分,结束循环。
代码
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; struct intn { int p,h; }d[1100]; bool cmp(intn a,intn b) { if(a.p==b.p)return a.h>b.h; return a.p<b.p; } int main() { int c,n,m,i,money; double sum; while(cin>>c) { while(c--) { cin>>n>>m; for(i=0;i<m;i++) cin>>d[i].p>>d[i].h; sort(d,d+m,cmp); sum=0; money=0; for(i=0;i<m;i++) { money+=d[i].p*d[i].h; sum+=d[i].h; if(money>n) { sum-=(money-n)*(double)1/d[i].p; break; } } printf("%.2lf\n",sum); } } return 0; }
原文地址:http://blog.csdn.net/blue_skyrim/article/details/46446533