博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1009 FatMouse' Trade
阅读量:6279 次
发布时间:2019-06-22

本文共 2169 字,大约阅读时间需要 7 分钟。

FatMouse' Trade

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 55094    Accepted Submission(s): 18478


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
 
解题思路:
这是一个简单的贪心的题目,我感觉做贪心的题的时候需要注意的情况就是排序,只要抓住按照什么排序的话,
贪心就迎刃而解了,那这个题的话,就是按照J[i] / F[i]从大到小排序,只要排完序了,在根据题意进行一下计算
那不就是ok了,
上代码:
#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MM(a) memset(a,0,sizeof(a))typedef long long LL;typedef unsigned long long ULL;const int maxn = 100000+5;const int mod = 1000000007;const double eps = 1e-7;struct Node{ double J, F, ave;}arr[maxn];double cmp(Node a, Node b){ return a.ave > b.ave;}int main(){ int m, n; while(cin>>m>>n) { if(m==-1 && n==-1) break; for(int i=0; i
>arr[i].J>>arr[i].F; arr[i].ave = arr[i].J/arr[i].F; } sort(arr, arr+n, cmp); double ret = 0.0; for(int i=0; i
= arr[i].F) { ret += arr[i].J; m -= arr[i].F; } else { ret += arr[i].J/arr[i].F*m; break;///注意要break哦 } } printf("%.3lf\n",ret); } return 0;}

转载地址:http://bnbva.baihongyu.com/

你可能感兴趣的文章
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>