HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法
题意:
一只老鼠用猫粮来换豆子,每个房间的兑换率不同,所以得尽量从兑换率高的房间先兑换。肥老鼠准备M磅猫粮去跟猫交易,让猫在warehouse中帮他指路,以找到好吃的。warehouse有N个房间,第i个房间包含J[i]磅豆子,且要求F[i]磅猫粮。肥老鼠不必交易房间里的所有豆子,相反,当他以F[i]*a% 磅猫粮交换,就可以拿到J[i]*a%磅豆子,这里a是一个实数。现在,他准备把作业分配给你:他能获得最大的豆子数是多少。输入:非负整数M和N,紧接着有N行,每行有2个正数,分别是J[i]和F[i]。最后一个例子会给出两个-1作为结束。所有整数不超过1000。
输出:对于每个输入例子,打印出一个实数(可换得的豆子数),精确到小数点后3位。
思路:
为防止猫粮太多,那么兑换的话就需要每个房间计算一下兑换率,再搜索兑换率高的,这样下去复杂度为n的平方。所以用另外的方法,先根据兑换率降序排序,nlogn,再从头一个个兑换过去,也只是n次循环,所以复杂度为nlogn。
#include <algorithm>
#include <iostream>
using namespace std;
struct node
{
int f,j;
}trade[];
bool cmp(node a,node b)
{
return (double)a.f/a.j>(double)b.f/b.j;
}
double cal(int m,int n)
{
int i=;
double mount=;
while(m)
{
if(i>=n) return mount; //豆子太少,猫粮太多
if(m>=trade[i].j)//能交换整房间的豆子
{
m-=trade[i].j;
mount+=trade[i++].f;
}
else //不足交换整房间的豆子
{
mount+=((double)trade[i].f/trade[i].j)*m;
m=;
}
}
return mount;
}
void main()
{
int m,n,i;
while(scanf("%d %d",&m,&n)&&m!=-&&n!=-)
{
for(i=;i<n;i++)
cin>>trade[i].f>>trade[i].j;
sort(trade,trade+n,cmp); //按兑换率排序,降序
printf("%.3f\n",cal(m,n));
}
}
1009
HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法的更多相关文章
- HDU 1009 FatMouse' Trade(简单贪心)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...
- HDU 1009 FatMouse' Trade(简单贪心 物品可分割的背包问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...
- Hdu 1009 FatMouse' Trade 分类: Translation Mode 2014-08-04 14:07 74人阅读 评论(0) 收藏
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1009 FatMouse' Trade(贪心)
FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...
- HDU 1009 FatMouse' Trade【贪心】
解题思路:一只老鼠共有m的猫粮,给出n个房间,每一间房间可以用f[i]的猫粮换取w[i]的豆,问老鼠最多能够获得豆的数量 sum 即每一间房间的豆的单价为v[i]=f[i]/w[i],要想买到最多的豆 ...
- Hdu 1009 FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1009:FatMouse' Trade(贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Hdu 1009 FatMouse' Trade 2016-05-05 23:02 86人阅读 评论(0) 收藏
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- [题解]hdu 1009 FatMouse' Trade(贪心基础题)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
随机推荐
- MySQL 文件导入出错
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot exec ...
- 洛谷P1164 小A点菜(01背包求方案数)
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- CF70D Professor's task(动态凸包)
题面 两种操作: 1 往点集S中添加一个点(x,y); 2 询问(x,y)是否在点集S的凸包中. 数据保证至少有一个2操作, 保证刚开始会给出三个1操作, 且这三个操作中的点不共线. 题解 动态凸包板 ...
- (转)System.Web.Mvc.UrlHelper的学习与使用
转载自http://www.cnblogs.com/longgel/archive/2010/02/06/1664884.html 上一次学习了HtmlHelper帮助类,这次我们学习一下UrlHel ...
- CLR Via C#: CLR 的执行模型
CLR(Common Language Runtime)公共语言运行时:是一个可由多种编程语言使用的“运行时”. 编译源代码文件的过程: C# 源代码文件 -> C# 编译器->托管模块( ...
- 线段树 洛谷P3932 浮游大陆的68号岛
P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...
- 退役or延期退役
究竟是\(150\)天后退役,还是能继续续命呢? 一切看自己了!加油!\(cyh\)!千万不要败在别人的只言片语之下啊!
- POJ1845 Sumdiv 数学?逆元?
当初写过一篇分治的 题意:求A^B的所有因子之和,并对其取模 9901再输出 对于数A=p1^c1+p2^c2+...+pn*cn,它的所有约数之和为(1+p1+p1^2+p1^3+...+p1^(c ...
- spring事物的管理方式
Spring事务配置的五种方式 转载大神总结: https://blog.csdn.net/xuanjiewu/article/details/51604967: 自己总结:这里只总结spring编程 ...
- JS——两个原生选择器
1. document.querySlector() 2.document.querySlectorAll() <!DOCTYPE html> <html lang="en ...