您的位置:首页 > 其它

hdu 1009 FatMouse' Trade

2014-01-03 22:59 603 查看
http://http://acm.hdu.edu.cn/showproblem.php?pid=1009

题目大意

每只猫把守一间房间,房间里有咖啡豆,老鼠可以拿猫粮去换,每个猫猫需要一定的猫粮,老鼠拿的猫粮的和猫需要的成一个比例,老鼠就能拿到这个比例的咖啡豆。问题是要我们求最多老鼠能拿到的咖啡豆。

题目分析:

这题其实就是可用贪心算法求的背包问题!只要老鼠每次先去换单位猫粮内最多的咖啡豆,最终获得的就是最大的咖啡豆。

算法设计:

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型和结构体的一级排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: