为了账号安全,请及时绑定邮箱和手机立即绑定

贪心——FatMouse' Trade(hdu1003)

标签:
算法

题目链接:

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;}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消