hdu 1009 FatMouse' Trade
2014-01-03 22:59
603 查看
http://http://acm.hdu.edu.cn/showproblem.php?pid=1009
题目大意:
每只猫把守一间房间,房间里有咖啡豆,老鼠可以拿猫粮去换,每个猫猫需要一定的猫粮,老鼠拿的猫粮的和猫需要的成一个比例,老鼠就能拿到这个比例的咖啡豆。问题是要我们求最多老鼠能拿到的咖啡豆。
题目分析:
这题其实就是可用贪心算法求的背包问题!只要老鼠每次先去换单位猫粮内最多的咖啡豆,最终获得的就是最大的咖啡豆。
算法设计:
1.咖啡豆/猫粮 为比较值,从大到小进行一次排列。
2.每次去换 咖啡豆/猫粮 最大的咖啡豆。
题目大意:
每只猫把守一间房间,房间里有咖啡豆,老鼠可以拿猫粮去换,每个猫猫需要一定的猫粮,老鼠拿的猫粮的和猫需要的成一个比例,老鼠就能拿到这个比例的咖啡豆。问题是要我们求最多老鼠能拿到的咖啡豆。
题目分析:
这题其实就是可用贪心算法求的背包问题!只要老鼠每次先去换单位猫粮内最多的咖啡豆,最终获得的就是最大的咖啡豆。
算法设计:
1.咖啡豆/猫粮 为比较值,从大到小进行一次排列。
2.每次去换 咖啡豆/猫粮 最大的咖啡豆。
#include<stdio.h> #include<stdlib.h> typedef struct In{ double x; double y; }; In num[1010]; int cmp(const void *a,const void *b) { return (*(In *)b).x/(*(In *)b).y>(*(In *)a).x/(*(In *)a).y?1:-1; }//结构体的一级排序,对double型的排序 int main() { double s; int i,n,m; while(scanf("%d%d",&n,&m)&&(n!=-1||m!=-1)) { for(i=0;i<m;i++) scanf("%lf%lf",&num[i].x,&num[i].y); qsort(num,m,sizeof(num[0]),cmp); for(s=i=0;i<m;i++) if(n>=num[i].y) {s+=num[i].x;n-=(int)num[i].y;} else {s+=((double)n*(num[i].x/num[i].y));break;} printf("%.3lf\n",s); } return 0; } //qsort函数要记清楚,特别是double型和结构体的一级排序
相关文章推荐
- hdu 1009 FatMouse' Trade(胖老鼠的交易)
- Hdu1009 - FatMouse' Trade - 贪心算法
- HDU 1009 FatMouse' Trade 贪心法
- hdu 1009 FatMouse' Trade(贪心)
- HDU 1009 FatMouse' Trade
- HDU-1009-FatMouse' Trade(简单贪心!)
- HDU 1009.FatMouse' Trade
- HDU 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade(贪心)
- hdu 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- HDU 1009 FatMouse' Trade题解
- Hdu 1009 FatMouse' Trade
- hdu 1009 FatMouse' Trade
- hdu-1009 FatMouse' Trade(贪心算法)
- HDU 1009:FatMouse' Trade(简单贪心)
- 【贪心专题】HDU 1009 FatMouse' Trade (贪心选取)
- hdu 1009 FatMouse' Trade(贪心)
- hdu 1009 FatMouse' Trade