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 ...
随机推荐
- JQuery获取body的大小
$('body').height(); $('body').width();
- 20169219《linux内核原理与分析》第六周作业
网易云课堂学习 1.intel x86 CPU有四种不同的执行级别0-3,linux只使用了其中的0级和3级分贝来表示内核态和用户态. 2.一般来说在linux中,地址空间是一个显著的标志:0xc00 ...
- EasyOffice-.NetCore一行代码导入导出Excel,生成Word
简介 Excel和Word操作在开发过程中经常需要使用,这类工作不涉及到核心业务,但又往往不可缺少.以往的开发方式在业务代码中直接引入NPOI.Aspose或者其他第三方库,工作繁琐,耗时多,扩展性差 ...
- bat实现监测计算机无线连接,断网自动重启无线
@echo off :Begin ping www.baidu.com if errorlevel 1 goto Reboot if errorlevel 0 goto Continue :Conti ...
- Protocol Buffers官方文档(proto3语言指南)
本文是对官方文档的翻译,大部分内容都是引用其他一些作者的优质翻译使文章内容更加通俗易懂(自己是直译,读起来有点绕口难理解,本人英文水平有限),参考的文章链接在文章末尾 这篇指南描述如何使用protoc ...
- [Django笔记] Apache + mod-wsgi 环境部署所遇到的各种问题总结
在一台CentOS7机器上配置Django+apache运行环境 Django安装 python2 or python3 ? 一般情况下Linux系统都有自带python2,本机CentOS7上的是p ...
- 如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参
[前言] 今天来给大家介绍下如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参! 因为我现在所测的系统模块中部分表在不同的数据库中,所以在用JDBC ...
- CF986A Fair
题目描述 Some company is going to hold a fair in Byteland. There are n n n towns in Byteland and m m m t ...
- image在div中有留白如何解决
解决办法: 1. 将img图片display:block,即可去掉div和img之间的空白: 2. 将div的line-height设置得足够小,也可以去掉空白,例如div{line-height:5 ...
- IOS 贝塞尔曲线切割圆角
写一个UIView扩展 1. .h文件 @interface UIView (Corner) - (void)setCornerWithType:(UIRectCorner)type Radius:( ...