题目链接:
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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦