Java编写胖老鼠的交易,猫鼠交易(贪心) HDU 1009 FatMouse' Trade
猫鼠交易(贪心) 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相关推荐
- Java编写胖老鼠的交易_猫和胖老鼠
FatMouse准备了M磅的Cat-Food,以便用来跟小Cat交换好吃的JavaBean. 现在有N个房间,第i个房间有J[i]磅的JavaBean,其交换的筹码是F[i]磅的Cat-Food. 当 ...
- Java编写胖老鼠的交易_HDOJ1009 肥鼠的交易 | 学步园
这个问题很简单,类似多重背包问题,不过这个多重背包是可以拿一部分的,而不像之前说的背包问题.很明显是贪心 上代码 #include #include #include #include using n ...
- HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法
题意: 一只老鼠用猫粮来换豆子,每个房间的兑换率不同,所以得尽量从兑换率高的房间先兑换.肥老鼠准备M磅猫粮去跟猫交易,让猫在warehouse中帮他指路,以找到好吃的.warehouse有N个房间,第 ...
- 期货策略matlab,code 一个利用MATLAB编写的螺纹钢期货高频交易套利策略 联合开发网 - pudn.com...
code 所属分类:金融证券系统 开发工具:matlab 文件大小:506KB 下载次数:398 上传日期:2013-10-09 14:14:53 上 传 者:huangxiao 说明: 一个利用M ...
- java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计架构校园二手物品交易源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构 ...
- 用Java编写第一个区块链(二)
用Java编写第一个区块链(二) 这篇文章将去介绍如何使用区块链进行交易. [本文禁止任何形式的全文粘贴式转载,本文来自 zacky31 的随笔] 目标: 在上一篇文章中,我们已经创建了一个可信任的区 ...
- 使用Java编写自己的区块链
使用Java编写自己的区块链 准备工作 开发环境 开始开发 Transaction类 Block类 BlockChain类 实现交易功能 实现创建新块功能 工作量证明 Blockchain作为API接 ...
- 使用JAVA编写报文接收端的注意事项
使用JAVA编写报文接收端的注意事项 在JAVA中编写报文服务端,是非常简单的事情,因为JAVA已经为我们封装了TCP/IP这些东西,我们不需要去关注这些:它对我们提供了方便操作的ServerSock ...
- java编写应用程序_使用Java API编写应用程序
java编写应用程序 总览 介绍 DB2JSON可用于DB2 Linux,Unix和Windows 10.5以及用于z / OS V3.1的IBM DB2 Accessories Suite与DB2 ...
最新文章
- PointPillar:利用伪图像高效实现3D目标检测
- vivado与modelsim的联合仿真(一)
- windows10 64位 Tensorflow安装--CUDA 9.1+cuDNN7.1.1+python3.6.4+tf1.6+vs2017
- Java Float类floatToIntBits()方法与示例
- 递归算法详细分析- C
- fshc模块fsch2mcu_if理解
- 全国计算机技术与软件专业技术资格(水平)考试
- C++求一个数的最大奇数约数
- ubuntu16.04中 vim8 backspace键删除功能失效
- vue el-table表格计算小计
- 使用elastix搭建IP电话及传真
- LIO-SAM imageProjection
- php inpo,优化PHP in_array()函数,效率提高50倍
- 8B / 10B Encode/Decode详解
- 牛客算法課 (算法入門班) 貪心與模擬(4)
- 大学生创新创业大赛应该如何入手?互联网+ 三创赛 挑战杯 有现成模板
- PHP刹车助力,自动刹车辅助都是骗人玩意儿?
- oracle UGA分布示意图
- 我的计算机-软件开发之路(1)
- 在阿里云上用mosquitto搭建MQTT服务器
热门文章
- 北交大计算机学院导师孙永齐,北京交通大学计算机与信息技术学院硕导介绍:陈连坤...
- 看懂联想服务器系列产品分类(上)
- 机器学习中auc与aupr 指的是什么?
- TextView 判断自动换行
- python mac自动打电话软件_Python实现Mac版QQ半自动发送情话(用了这个,我追到了自己的女神)...
- 平安证券Kubernetes容器集群的DevOps实践
- 关于@Transactional(readonly = false)注解不起作用的可能性
- 记录Z3中的BitVector
- 中国生物医用材料行业发展现状及投资战略研究分析报告2022~2027年
- iOS 九宫格输入不了问题出现原因及解决办法