题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
题目大意:和N只猫做生意。付Fi猫食得Ji豆子或者付部分猫食得相应比例的豆子。你有M个猫食问最多能得到多少豆子。
关键思想:按性价比排序,简单贪心
代码如下:
//结构体排序,简单贪心 #include <iostream> #include <algorithm> using namespace std; int M,N; double ans; struct room{ int b,c; double bc; }eg[10010]; bool cmp(room a,room b){ return a.bc>b.bc; } int main() { while(cin>>M>>N&&M!=-1){ ans=0; for(int i=0;i<N;i++){ cin>>eg[i].b>>eg[i].c; eg[i].bc=(double)(eg[i].b)/(eg[i].c); } sort(eg,eg+N,cmp); for(int i=0;i<N;i++){ if(M==0)break; else if(M>=eg[i].c){ M-=eg[i].c;ans+=eg[i].b; } else if(M<eg[i].c){ ans+=eg[i].bc*(double)M;M=0; } } printf("%.3f\n",ans); } return 0; }