猫鼠交易(贪心) HDU 1009 FatMouse’ Trade

FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.

The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.

Input

The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1’s. All integers are not greater than 1000.

Output

For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.

Sample Input

5 3

7 2

4 3

5 2

20 3

25 18

24 15

15 10

-1 -1

Sample Output

13.333

31.500

这里我就参考别人的翻译了一下:

猫鼠交易

题目描述:

胖老鼠准备了M榜的猫食,想要用来与守卫藏有他最爱的JavaBean的仓库的猫猫们进行交易。

仓库有N个房间,第i个房间里面有J[i]榜的JavaBean,同时需要F[i]榜的猫食才能换取。

胖老鼠可以只按比例换取JavaBean而不是换取整个房间的JavaBean。

现在它把交易计划交给你来处理:告诉它,它最多能得到多少榜JavaBean。

输入说明:

允许多次案例输入,每个案例的第一行为两个无符号整数 M和N。

接着是N行输入,每一行包含无符号整数J[i]和F[i]。

程序输入以两个-1结束。

所有的整数都不会超过1000。

输出说明:

对于每个案例,输出一个保留三位有效数字的实数,用来表示这个案例中胖老鼠最大能获得的JavaBean。

个人分析:

上面我把这个题的题意解释了一遍,采用贪心的思考问题方法

即“做出的是在某种意义上的局部最优解”,对于本题来说,局部最优解就是整体最优解,因此采用贪心法。

很显然,要采用结构体做,那么我们申明结构体一般还要写好cmp方法,并且是重载的cmp方法 具体如下:

struct node

{

int j;

int f;

double rate;

}fm[1008];

int cmp(node x,node y)

{

return x.rate>y.rate;

}

要使JavaBean最大,那就得要每一榜猫食换取尽可能多的JavaBean。

所以 先计算出每一个房间的 单位食物能换取的JavaBean,即 rate[i] = J[i]/F[i]。

接着 对结构体fm(肥鼠)排序,rate[i]越大,JavaBean换的越多

剩余的JavaBean小到不足以换取整个房间的JavaBean时,选择按比例换取JavaBean。(也就是剩余的m去乘rate[i]那个比例) 如下关键代码:

sort(fm,fm+n,cmp);

for(int i=0;i

{

if(m>=fm[i].f)

{

m-=fm[i].f;

sum+=fm[i].j;

}

else

{

sum+=fm[i].rate*m;

break;

}

}

对以上代码解释:

m是这只肥鼠所有的猫粮 通过比例排序(从大到小排)比例大的那么我们获得的豆子也就越多 只要m>=fm[i].f 那么我们可以获得全部的豆子 剩余的m不足以获得全部的豆子我们用比例来拿 sum+=fm[i].rate*m; 但是注意拿了之后要break 因为已经拿完了 不然还会继续循环的。。。这里要注意

个人感受:

这个贪心也是我第一次遇到,觉得很不可思议,因为这个题是通过比例来求解的,看来要走的路还挺长的,虽然走的很慢,但还是要坚持下去!

具体代码如下:

#include

#include

#include

using namespace std;

struct node

{

int j;

int f;

double rate;

}fm[1008];

int cmp(node x,node y)

{

return x.rate>y.rate;

}

int main()

{

int m,n;

while(cin>>m>>n&&m!=-1&&n!=-1)

{

double sum=0;

for(int i=0;i

{

cin>>fm[i].j>>fm[i].f;

fm[i].rate=(double)fm[i].j/fm[i].f;

}

sort(fm,fm+n,cmp);

for(int i=0;i

{

if(m>=fm[i].f)

{

m-=fm[i].f;

sum+=fm[i].j;

}

else

{

sum+=fm[i].rate*m;

break;

}

}

printf("%.3lf\n",sum);

}

return 0;

}

学如逆水行舟,不进则退

Java编写胖老鼠的交易,猫鼠交易(贪心) HDU 1009 FatMouse' Trade相关推荐

  1. Java编写胖老鼠的交易_猫和胖老鼠

    FatMouse准备了M磅的Cat-Food,以便用来跟小Cat交换好吃的JavaBean. 现在有N个房间,第i个房间有J[i]磅的JavaBean,其交换的筹码是F[i]磅的Cat-Food. 当 ...

  2. Java编写胖老鼠的交易_HDOJ1009 肥鼠的交易 | 学步园

    这个问题很简单,类似多重背包问题,不过这个多重背包是可以拿一部分的,而不像之前说的背包问题.很明显是贪心 上代码 #include #include #include #include using n ...

  3. HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法

    题意: 一只老鼠用猫粮来换豆子,每个房间的兑换率不同,所以得尽量从兑换率高的房间先兑换.肥老鼠准备M磅猫粮去跟猫交易,让猫在warehouse中帮他指路,以找到好吃的.warehouse有N个房间,第 ...

  4. 期货策略matlab,code 一个利用MATLAB编写的螺纹钢期货高频交易套利策略 联合开发网 - pudn.com...

    code 所属分类:金融证券系统 开发工具:matlab 文件大小:506KB 下载次数:398 上传日期:2013-10-09 14:14:53 上 传 者:huangxiao 说明:  一个利用M ...

  5. java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构 ...

  6. 用Java编写第一个区块链(二)

    用Java编写第一个区块链(二) 这篇文章将去介绍如何使用区块链进行交易. [本文禁止任何形式的全文粘贴式转载,本文来自 zacky31 的随笔] 目标: 在上一篇文章中,我们已经创建了一个可信任的区 ...

  7. 使用Java编写自己的区块链

    使用Java编写自己的区块链 准备工作 开发环境 开始开发 Transaction类 Block类 BlockChain类 实现交易功能 实现创建新块功能 工作量证明 Blockchain作为API接 ...

  8. 使用JAVA编写报文接收端的注意事项

    使用JAVA编写报文接收端的注意事项 在JAVA中编写报文服务端,是非常简单的事情,因为JAVA已经为我们封装了TCP/IP这些东西,我们不需要去关注这些:它对我们提供了方便操作的ServerSock ...

  9. java编写应用程序_使用Java API编写应用程序

    java编写应用程序 总览 介绍 DB2JSON可用于DB2 Linux,Unix和Windows 10.5以及用于z / OS V3.1的IBM DB2 Accessories Suite与DB2 ...

最新文章

  1. PointPillar:利用伪图像高效实现3D目标检测
  2. vivado与modelsim的联合仿真(一)
  3. windows10 64位 Tensorflow安装--CUDA 9.1+cuDNN7.1.1+python3.6.4+tf1.6+vs2017
  4. Java Float类floatToIntBits()方法与示例
  5. 递归算法详细分析- C
  6. fshc模块fsch2mcu_if理解
  7. 全国计算机技术与软件专业技术资格(水平)考试
  8. C++求一个数的最大奇数约数
  9. ubuntu16.04中 vim8 backspace键删除功能失效
  10. vue el-table表格计算小计
  11. 使用elastix搭建IP电话及传真
  12. LIO-SAM imageProjection
  13. php inpo,优化PHP in_array()函数,效率提高50倍
  14. 8B / 10B Encode/Decode详解
  15. 牛客算法課 (算法入門班) 貪心與模擬(4)
  16. 大学生创新创业大赛应该如何入手?互联网+ 三创赛 挑战杯 有现成模板
  17. PHP刹车助力,自动刹车辅助都是骗人玩意儿?
  18. oracle UGA分布示意图
  19. 我的计算机-软件开发之路(1)
  20. 在阿里云上用mosquitto搭建MQTT服务器

热门文章

  1. 北交大计算机学院导师孙永齐,北京交通大学计算机与信息技术学院硕导介绍:陈连坤...
  2. 看懂联想服务器系列产品分类(上)
  3. 机器学习中auc与aupr 指的是什么?
  4. TextView 判断自动换行
  5. python mac自动打电话软件_Python实现Mac版QQ半自动发送情话(用了这个,我追到了自己的女神)...
  6. 平安证券Kubernetes容器集群的DevOps实践
  7. 关于@Transactional(readonly = false)注解不起作用的可能性
  8. 记录Z3中的BitVector
  9. 中国生物医用材料行业发展现状及投资战略研究分析报告2022~2027年
  10. iOS 九宫格输入不了问题出现原因及解决办法