HDOJ1009.FatMouse' Trade
来源:互联网 发布:如何求矩阵的n次方 编辑:程序博客网 时间:2024/05/21 10:16
试题请参见: http://acm.hdu.edu.cn/showproblem.php?pid=1009
题目概述
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.
说实话, 这题意我也是看了翻译才看懂的.
大意是说, 有N个仓库存放有猫爱吃的CatFood和老鼠爱吃的JavaBean. 老鼠有M个CatFood可以”贿赂”猫换取这个仓库的JavaBean. 若老鼠使用这个仓库中a%的CatFood, 那么可以换取a%的JavaBean. 求老鼠最多可以获得多少个JavaBean.
解题思路
很显然, 如果JavaBean / CatFood
的比率越高, 这个仓库的产出就越高. 意味着老鼠可以用最少的CatFood换取最多的JavaBean.
因此, 这很显然是贪心算法. 对JavaBean / CatFood
的比值进行排序, 优先选择产值高的仓库. 当最后CatFood不够时, 再将仓库中a%的CatFood换成JavaBean.
遇到的问题
没有考虑到这种输入:
0 11 0
预期的输出应该是 1.000
源代码
#include <iostream>#include <iomanip>#include <algorithm>#define INT_MAX 2147483647const int MAX_SIZE = 1000;struct WareHouse { double javaBean; double catFood; float rate;};WareHouse wareHouses[MAX_SIZE];bool compareTo(const WareHouse &x, const WareHouse &y) { return x.rate > y.rate;}int main() { int m = 0, n = 0; while ( std::cin >> m >> n ) { if ( m == -1 && n == -1 ) { break; } for ( int i = 0; i < n; ++ i ) { std::cin >> wareHouses[i].javaBean >> wareHouses[i].catFood; if ( wareHouses[i].catFood == 0 ) { wareHouses[i].rate = 2147483647; } else { wareHouses[i].rate = wareHouses[i].javaBean / wareHouses[i].catFood; } } std::sort(wareHouses, wareHouses + n, compareTo); double restCatFood = m; double totalJavaBean = 0; for ( int i = 0; i < n; ++ i ) { if ( restCatFood < 0 ) { break; } else if ( restCatFood < wareHouses[i].catFood ) { double rate = restCatFood / wareHouses[i].catFood; totalJavaBean += wareHouses[i].javaBean * rate; } else { totalJavaBean += wareHouses[i].javaBean; } restCatFood -= wareHouses[i].catFood; } std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(3) << totalJavaBean << std::endl; } return 0;}
- HDOJ1009.FatMouse' Trade
- FatMouse' Trade<hdoj1009>
- Hdoj1009 FatMouse' Trade
- zoj 2109 || hdoj1009 FatMouse' Trade(贪心)
- hdoj1009 FatMouse' Trade——贪心算法
- HDOJ1009 FatMouse' Trade(贪心,硬币问题)
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- FatMouse' Trade
- 做个掌控外力的智者
- lua中的require机制
- XMPP 连接登录过程
- android 6 sdk/ndk下载地址
- 关于在虚拟设备上运行项目的时候遇到INSTALL_FAILED_NO_MATCHING_ABIS,提示卸载以前安装的版本
- HDOJ1009.FatMouse' Trade
- cocos3.X 惯性滑动
- 能控制早晨的人,方可控制人生
- 贝塞尔曲线原理和android相关API接口
- asp.net mvc ajaxForm提交上传代办
- css 浮动问题解决的方法
- C语言 printf 格式化 输出 右对齐补零
- 自定义ViewGroup
- hdu5112A Curious Matt 水题