HDU-1009-FatMouse' Trade(简单贪心!)
2015-11-16 17:47
603 查看
FatMouse' Trade
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 57128 Accepted Submission(s): 19145
Problem Description
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
Author
CHEN, Yue
Source
ZJCPC2004
Recommend
JGShining | We have carefully selected several similar problems for you: 1003 1010 1007 1789 1257
想起来上回做题,都已经是7月份的事情,正是暑假刚开始那会儿,也不知道怎么了,只能说心意不在了吧。许久未写C++都有些生疏了......
转眼大三,忙着课程,忙着JSP,PHP,忙着做项目,忙着写用例图,当题确乎是没有A了。现在想来,今天也不知怎么,想着做一道题。
就是当时想了很久没做出的这道。居然没用几分钟就解了,算法是一种信念,是程序的灵魂。而A题是提高算法的必经之路。所以,从今
天开始,重新开始吧!Fight!
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int J,F; double JF; }bag[1010]; bool cmp(node x,node y) { return x.JF>y.JF; } int main() { int m,n,i; while(scanf("%d%d",&m,&n),m!=-1||n!=-1) { //The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food for(i=0;i<n;i++) { scanf("%d%d",&bag[i].J,&bag[i].F); bag[i].JF = bag[i].J*1.0/bag[i].F; } //所以这里要是降序排列,因为要用最少的cat food 换取最多的JavaBeans sort(bag,bag+n,cmp); double sum = 0; for(i=0;i<n;i++) { if(bag[i].F<m) //如果FatMouse的M大于当前能换取的值,直接换 { sum+=bag[i].J; m-=bag[i].F; } else //否则还是按照最大的比列能换多少换多少 { sum+=bag[i].JF*m; break; } } printf("%.3lf\n",sum); } }
相关文章推荐
- unix_timestamp 和 from_unixtime 时间戳函数 区别
- 点击删除后出现CheckBox实现批量删除
- sqoop2 五分钟实例
- 实习整理(八)
- Tomcat 7.0 64位免安装解压版 安装及配置
- 如何学习外国人的思维方式说英语
- 二叉树 – 数据结构和算法43
- MySQL mmm agent 在CentOS 7下面,机器重启后,进程正常启动,但是无法绑定vip的情况
- 树的存储结构2 – 数据结构和算法42
- 写一个监控网络和应用端口的shell脚本程序
- Poco实体
- 框架进阶笔记
- 排序算法小结
- 利用Zabbix API 获取各个分组下的服务器列表以及详细信息
- Android android:layout_weight问题
- 使用Java代码进行因数分解和求最小公倍数的示例
- Phthon学习笔记1
- C++ Assert()
- SQL连表查询/JOIN
- 树的存储结构 – 数据结构和算法41