继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

贪心——FatMouse' Trade(hdu1003)

九日王朝
关注TA
已关注
手记 180
粉丝 41
获赞 185

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1003


题目描述:

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


题目分析:虽然比较绕,但也是一个比较明显的贪心问题  只要老鼠每次先去换单位猫粮内最多的咖啡豆,最终获得的就是最大的咖啡豆。
第一、咖啡豆/猫粮 为比较值,从大到小进行一次排列。
第二、每次去换 咖啡豆/猫粮 最大的咖啡豆。



#include<stdio.h>int main(){	int n,i,j,d;	double m,sum,t,a[20000],b[20000];	while(scanf("%lf%d",&m,&n)!=EOF)	{	if(n==-1&&m==-1)	break;	for(i=0;i<n;i++)		scanf("%lf%lf",&a[i],&b[i]);		sum=0;				for(i=0;i<n-1;i++)		{		   	if(m==0)		   	break;		   	d=i;			for(j=i+1;j<n;j++)			if((a[d]*b[j])<(a[j]*b[d]))			d=j;			t=a[i];a[i]=a[d];a[d]=t;			t=b[i];b[i]=b[d];b[d]=t;			     				if(b[i]<=m)			{			sum+=a[i];			m-=b[i];			}			else			{			sum+=m*1.0/b[i]*a[i];			m=0;			}			}		printf("%.3lf\n",sum);	}	return 0;}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP