题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
题意:有只肥老鼠想跟很多房间的猫哥哥换粮食,但是每个房间的猫收费标准不同,问可怜的小老鼠最后最多能换多少粮食。
思路:按照性价比排序,贪心。
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
///
struct Node{
int j,f;
}node[1000+10];
bool cmp(Node a,Node b){
return a.j*b.f > b.j*a.f;
}
int main(){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF && m!=-1){
for(int i=0;i<n;i++){
scanf("%d %d",&node[i].j,&node[i].f);
}
sort(node,node+n,cmp);
double ans = 0;
for(int i=0;i<n;i++){
if(m>=node[i].f){
ans += node[i].j;
m -= node[i].f;
}else{
ans += m*(node[i].j/(node[i].f*1.0));
break;
}
}
printf("%.3lf\n",ans);
}
return 0;
}