传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=1009

FatMouse' Trade

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

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
 
Recommend
JGShining   |   We have carefully selected several similar problems for you:  1051 1052 1049 2187 1001 
 
题目意思:
一共有n个房子,每个房子里有老鼠喜欢吃的javabeans,但是每个房间里的javabeans的价格不一样。老鼠用m元,问m元最多可以卖多少javabeans,其中每个房间里的javabeans可以被分割。
 
分析:按照单价排序(价值除以重量),一直选择单价最大的的全部,当不能选择全部的时候,选择一部分
 
code:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<set>
#include<map>
#include<string>
#include<memory.h>
#include<math.h>
#define eps 1e-7
using namespace std;
#define max_v 1005
struct node
{
double v,c;
}p[max_v];
bool cmp(node a,node b)
{
return (a.v/a.c)>(b.v/b.c);//单价
}
int main()
{
int n,m;
double sum;
int i;
while(cin>>m>>n)
{
if(n==-&&m==-)
break;
for(i=;i<n;i++)
cin>>p[i].v>>p[i].c;
sort(p,p+n,cmp);
sum=;
for(i=;i<n;i++)
{
if(m>=p[i].c)
{
sum+=p[i].v;
m-=p[i].c;
}else
{
sum+=(m*(p[i].v/p[i].c));
break;
}
}
printf("%0.3lf\n",sum);
}
return ;
}
 
 

最新文章

  1. Android开发之无线遥控器
  2. 关于SQL SERVER的N前缀的理解
  3. Matrix对bitmap的一些操作
  4. WPF如何在同一个区域依次叠加显示多张图片呢?
  5. /etc/passwd 结构
  6. uva 12100 Printer Queue
  7. [gkk]传智-适配器设计模式,如同电源适配器
  8. java大数取余
  9. Servlet中的跳转(redirect和forward)
  10. redis的list类型!!!!
  11. idea构建maven多项目web架构
  12. Asp.Net MVC三层架构之autofac使用教程
  13. [PHP] 算法-原址排序数组使奇数位于偶数前面的PHP实现
  14. Lifting the Stone(hdu1115)多边形的重心
  15. Jenkins 在mac平台的安装与配置
  16. C#判断字符串的是否是汉字
  17. Dropout原理解析
  18. 【Spring】SpringMVC非注解配置的两种方式
  19. codeforces 894B - Ralph And His Magic Field - [数学题]
  20. Java-Runoob-高级教程-实例-数组:07. Java 实例 – 数组合并

热门文章

  1. OOP 第二章作业总结
  2. DataTables添加额外的查询参数和删除columns等无用参数
  3. asp.net 、C#实现微信企业号OAuth2认证
  4. IIS 网站发布——遇到的问题,以及解决方案
  5. js权威指南学习笔记(四)对象
  6. svg拖拽和缩放
  7. javascript多浏览器的兼容
  8. 基于Tag的Docker自动构建
  9. &#39;weblogic.kernel.Default (self-tuning) 问题weblogic层面解决办法
  10. pt-archiver(数据导入导出工具)