HDU-1009 贪心
题目描述:题意大概就是FatMouse有M磅的鼠食,它用鼠食去换存放于N个房间的JavaBeans,每个房间存放的JavaBeans需要定义对应的兑换鼠食的数量。需要问在什么情况下,FatMouse能换得最多的JavaBeans。
注意:如果剩下的鼠食不足以兑换该房间的JavaBeans,则需要以一定的比率兑换。
算法思路: 典型的贪心应用
算法代码:
View Code
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 struct fatmouse 5 { 6 double j,f; 7 double ratio; 8 }p[1001]; 9 10 int comp(struct fatmouse &a,struct fatmouse &b) 11 { 12 return a.ratio>b.ratio; 13 } 14 int main() 15 { 16 int m,n; 17 while(cin>>m>>n && (m!=-1 || n!=-1)) 18 { 19 int i; 20 for(i=0;i<n;++i) 21 { 22 cin>>p[i].j>>p[i].f; 23 p[i].ratio=p[i].j/p[i].f; 24 } 25 sort(p,p+n,comp); 26 double sum=0; 27 for(i=0;i<n;++i) 28 { 29 if(m>p[i].f) 30 { 31 sum+=p[i].j; 32 m-=p[i].f; 33 } 34 else 35 { 36 sum+=p[i].ratio*m; 37 m=0; 38 break; 39 } 40 } 41 printf("%.3lf\n",sum); 42 } 43 return 0; 44 }
作者:ballwql
本文为作者原创,版权所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。