HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法
题意:
一只老鼠用猫粮来换豆子,每个房间的兑换率不同,所以得尽量从兑换率高的房间先兑换。肥老鼠准备M磅猫粮去跟猫交易,让猫在warehouse中帮他指路,以找到好吃的。warehouse有N个房间,第i个房间包含J[i]磅豆子,且要求F[i]磅猫粮。肥老鼠不必交易房间里的所有豆子,相反,当他以F[i]*a% 磅猫粮交换,就可以拿到J[i]*a%磅豆子,这里a是一个实数。现在,他准备把作业分配给你:他能获得最大的豆子数是多少。输入:非负整数M和N,紧接着有N行,每行有2个正数,分别是J[i]和F[i]。最后一个例子会给出两个-1作为结束。所有整数不超过1000。
输出:对于每个输入例子,打印出一个实数(可换得的豆子数),精确到小数点后3位。
思路:
为防止猫粮太多,那么兑换的话就需要每个房间计算一下兑换率,再搜索兑换率高的,这样下去复杂度为n的平方。所以用另外的方法,先根据兑换率降序排序,nlogn,再从头一个个兑换过去,也只是n次循环,所以复杂度为nlogn。
#include <algorithm>
#include <iostream>
using namespace std;
struct node
{
int f,j;
}trade[];
bool cmp(node a,node b)
{
return (double)a.f/a.j>(double)b.f/b.j;
}
double cal(int m,int n)
{
int i=;
double mount=;
while(m)
{
if(i>=n) return mount; //豆子太少,猫粮太多
if(m>=trade[i].j)//能交换整房间的豆子
{
m-=trade[i].j;
mount+=trade[i++].f;
}
else //不足交换整房间的豆子
{
mount+=((double)trade[i].f/trade[i].j)*m;
m=;
}
}
return mount;
}
void main()
{
int m,n,i;
while(scanf("%d %d",&m,&n)&&m!=-&&n!=-)
{
for(i=;i<n;i++)
cin>>trade[i].f>>trade[i].j;
sort(trade,trade+n,cmp); //按兑换率排序,降序
printf("%.3f\n",cal(m,n));
}
}
1009
HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法的更多相关文章
- HDU 1009 FatMouse' Trade(简单贪心)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...
- HDU 1009 FatMouse' Trade(简单贪心 物品可分割的背包问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...
- Hdu 1009 FatMouse' Trade 分类: Translation Mode 2014-08-04 14:07 74人阅读 评论(0) 收藏
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1009 FatMouse' Trade(贪心)
FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...
- HDU 1009 FatMouse' Trade【贪心】
解题思路:一只老鼠共有m的猫粮,给出n个房间,每一间房间可以用f[i]的猫粮换取w[i]的豆,问老鼠最多能够获得豆的数量 sum 即每一间房间的豆的单价为v[i]=f[i]/w[i],要想买到最多的豆 ...
- Hdu 1009 FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1009:FatMouse' Trade(贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Hdu 1009 FatMouse' Trade 2016-05-05 23:02 86人阅读 评论(0) 收藏
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- [题解]hdu 1009 FatMouse' Trade(贪心基础题)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
随机推荐
- vue+element-ui 实现分页
<el-table ref="multipleTable" :data="tableData.slice((currentPage-1)*pagesize,curr ...
- c#桌面应用程序--窗体重复创建问题
重复创建窗体问题的引出 连续单击添加窗体按钮,通过普通的在按钮事件方法中创建窗体,显示窗体的后果是,我们会发现,相同的窗体会重复不断的弹出.代码如下: //添加窗口事件方法 private void ...
- filter、map、reduce区别
1.filter filter(function,sequence)-->list,tuple or string 1) 参数func是自定义的过滤函数,在函数func(item)中 ...
- MySQL的复制:MySQL系列之十三
一.MySQL复制相关概念 主从复制:主节点将数据同步到多个从节点 级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制 ...
- Unity 行为树-基础
.前言 Unity里面的行为树又名BehaviorTree,最常用在NPC的敌人逻辑中. 二.基础说明(转载) 1.行为树的调用时间为每帧: 2.每个节点的状态只能下面3个中的其一:成功Success ...
- string中执行sql语句
Spring(JdbcTemplate.class)中的queryForMap().queryForObject().queryForLong().queryForInt()等方法都会去调用publi ...
- 转 基于MySQL MEB的备份恢复
几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...
- vector的学习
学习链接:http://www.runoob.com/cplusplus/cpp-stl-tutorial.html kandaima #include<iostream> #includ ...
- Unity Time.timeScale
原创网址: http://www.xuanyusong.com/archives/2956 项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.ti ...
- jdbc 大数据存储 图片读取
package com.itheima.clob.test; import java.io.File; import java.io.FileReader; import java.io.FileWr ...