题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
大意:有一部分钱去买猫粮,每个仓库有一定数量的猫粮和所需要的价格。支付百分比的价格将获得百分比的猫粮
思路:贪心算法思想,计算出每个仓库内猫粮的性价比,根据性价比对仓库内元素进行排序
从性价比最高的开始买,直到金钱为0
代码:
#include<bits/stdc++.h> using namespace std; int m;int n; struct mm{ int a; int b; }; mm f[1010]; bool cmp (mm a,mm b) { return (double)(a.a)/a.b>(double)(b.a)/b.b; } int main() { while(~scanf("%d%d",&m,&n)) { if(m==-1&&n==-1) break; memset(f,0,sizeof f); double sum = 0; for(int i = 1;i<=n;i++) { cin>>f[i].a>>f[i].b; } sort(f+1,f+n+1,cmp); /* for(int i=1;i<=n;i++) { cout<<f[i].a<<' '<<f[i].b<<endl; }*/ int i=1; // cout<<m<<'!'<<endl; while(m>0) { if(m>f[i].b) sum+=f[i].a,m-=f[i].b; else sum+=double(f[i].a)*(double)(m)/f[i].b,m=0; i++; } printf("%.3f\n",sum); } }