ZOJ 2109 FatMouse' Trade (背包 dp + 贪婪)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1109
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
翻译:
从前有仅仅肥肥的老鼠。他叫FatMouse,他就像人类的恐怖分子跟敌人交易军火一样,猥琐的他准备了M磅猫食,准备与守卫仓库的大猫们进行交易,仓库里有他最爱吃的食物Javabean。
仓库里有N个房间,第i间房间里有J[i]磅Javabean且须要F[i]磅猫食进行交换,FatMouse不必吧每一个房间里的Javabean所实用于交易,相反。他可以付给大猫F[i]*a%磅猫食,从而换的J[i]*a%磅的Javabean。当中,a是一个实数,如今他给你布置一个家庭作业,请你告诉他他最多可以获得多少磅Javabean。
输入描写叙述:
输入包括多组測试数据,每组測试数据的开头一行是两个非负整数M, N.接下来的N行中,每行包括两个非负整数J[i]和F[i],最后一组測试数据是两个-1。全部的整数的值不糊超过1000。
输出描写叙述:
对于每组測试数据,在一行上打印出一个3位小数的实数,这个实数是FatMouse可以交易到的最大数量的Javabean.
解题思路:
本题要求输出最大交易量。并保留三位小数。这样,我们使用J[i]除以F[i]就得到了a,那么,交易的时候,为了获得最多的Javabean,要先交易a大的。这样就确保了能交易到最多的Javabean.
把数据读入结构体中,再将结构体作为向量的元素,再按a由大到小的顺序给向量排序,然后依次进行计算。这样的题目属于背包类的题目!
(dp + 贪心)
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <set>
#define MAXN 10005
#define RST(N)memset(N, 0, sizeof(N))
#include <algorithm>
using namespace std; typedef struct Mouse_ {
double J, F;
double a;
}Mouse; int n, m;
vector <Mouse> v;
vector <Mouse> ::iterator it; bool cmp(const Mouse m1, const Mouse m2)
{
if(m1.a != m2.a) return m1.a > m2.a;
else return m1.F < m2.F;
} int main()
{
while(~scanf("%d %d", &n, &m)) {
if(n == -1 && m == -1) break;
Mouse mouse;
v.clear();
for(int i=0; i<m; i++) {
scanf("%lf %lf", &mouse.J, &mouse.F);
mouse.a = mouse.J/mouse.F;
v.push_back(mouse);
}
sort(v.begin(), v.end(), cmp);
double sum = 0;
for(int i=0; i<v.size(); i++) {
if(n > v[i].F) {
sum += v[i].J;
n -= v[i].F;
}else {
sum += n*v[i].a;
break;
}
}
printf("%.3lf\n", sum);
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
ZOJ 2109 FatMouse' Trade (背包 dp + 贪婪)的更多相关文章
- zoj 2109 FatMouse' Trade
FatMouse' Trade Time Limit: 2 Seconds Memory Limit: 65536 KB FatMouse prepared M pounds of cat ...
- FatMouse' Trade(杭电1009)
FatMouse' Trade Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- zoj 1108 FatMouse's Speed 基础dp
FatMouse's Speed Time Limit: 2 Seconds Memory Limit:65536 KB Special Judge FatMouse believe ...
- zoj 1108 FatMouse's Speed 基础dp
FatMouse's Speed Time Limit: 2 Seconds Memory Limit:65536 KB Special Judge FatMouse believe ...
- HDU 1009:FatMouse' Trade(简单贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1160 FatMouse's Speed(DP)
题意 输入n个老鼠的体重和速度 从里面找出最长的序列 是的重量递增时速度递减 简单的DP 令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度 对与每一个老鼠i 遍历全部老鼠j 当 ...
- hdu 1009 FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- ZOJ 3956 Course Selection System 背包DP
ZOJ3956 观察数据范围, c的值非常小 只有100 所以c的和也很有限 只有50000 是否可以从这里下手? 对于某一个c的和 我们一定希望h的和最大 才有可能是最终答案. 于是有了类似背包的d ...
- HDU 1160 FatMouse's Speed DP题解
本题就先排序老鼠的重量,然后查找老鼠的速度的最长递增子序列,只是由于须要按原来的标号输出,故此须要使用struct把三个信息打包起来. 查找最长递增子序列使用动态规划法.主要的一维动态规划法了. 记录 ...
随机推荐
- rails 4.0.2 + mongoid 对mongodb进行增删改查
新建项目 rails new mongoid_app --skip-active-record --skip-test-unit --skip-bundle create create README. ...
- Nginx并发訪问优化
Nginx反向代理并发能力的强弱,直接影响到系统的稳定性.安装Nginx过程,默认配置并不涉及到过多的并发參数,作为产品执行,不得不考虑这些因素.Nginx作为产品执行,官方建议部署到Linux64位 ...
- struts.xml在Action配置具体解释
在博客上我已经基本上解释struts.xml基本配置.配置过程最为基本的是action的动态配置. 一.Action的创建方法 1)实现Action接口 2)继承ActionSupport类,覆写当中 ...
- 于ubuntu配置hadoop当问题
1. 构造ssh登录 我们并不需要改变/etc/ssh/sshd_config 2. 新hadoop用户,home下列不hadoop夹 创建使用下面的命令 useradd -m hadoop 3. n ...
- USACO maze1 BFS
不写了很长的时间bfs该,很长一段时间的中间失误,当延期一次延伸成功的新节点的节点应该被标记为参观.否则,在某些情况下无限期延长队列. 输入一个小坑爹处理称号,能够进来当字符串被读取.然后用周围的墙上 ...
- CPU 风扇清理灰尘加油全过程图解
主机电源风扇因为使用时间长,风扇轴承的润滑油耗尽,导致风扇转速下降或是不转,引起电源热量无法有效排除而造成电脑常常死机,解决的方法有几种. 现图讲解明最简单省钱的办法例如以下: 1.把电源从主机上拆下 ...
- mysql位_01检查错误代码的方法
1 看到官方帮助文档 当前最新版本号的错误码见 http://dev.mysql.com/doc/refman/5.7/en/error-handling.html 2 在安装mysql的环境中调用m ...
- Linux的selinux
SELinux 操作模式 学科 (Subject):SELinux 序,因此你能够将『主体』跟 process 划上等号: 目标 (Object): 主体程序是否能存取的『目标资源』一 ...
- j2se--Socket沟通
第一次接触Socket课程设计大二,我在做一个图书馆管理系统.源代码是从互联网上下载,代码天天磨,隐约中记得有Socket这么一个单词. 第二次是去年代表学校參加"河北省电子信息职业技能大赛 ...
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
得知DIP文章66日 转载请注明文章出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管.欢迎共同开发:https://g ...