题目描述

有一只老鼠很喜欢奶酪,但是奶酪被分别放在N个房间里,而且这些房间都有一只猫咪看守,现在它准备和猫咪们做个交易。它有M磅的猫食,想用这M磅猫食换取奶酪。在猫咪看守的每一个房间里有奶酪J[i]磅,同时猫咪需要F[i]磅的食物,如果老鼠给猫咪F[i](a)%的猫食,那么它就可以得到J[i](a)%的奶酪。现在已知每只猫咪对猫食的需求量和每个房间的奶酪数,那老鼠怎样才能换得最多的奶酪呢?

输入格式
第一行输入两个正整数M和N(M和N不大于10000),后面跟N行(每个房间的奶酪数和猫食的需求量)。
输出格式
输出老鼠得到的最多的奶酪数,保留三位小数。

样例

样例1输入
5 3
7 2
4 3
5 2
样例1输出
13.333

样例2输入
20 3
25 18
24 15
15 10
样例2输出
31.500

算法分析

这一题很明显为贪心算法,但因为a不定,所以最为困难的就是a%。而这时候,易发现当a[i].j很小而a[i].f很大时,这是我们最想要的情况,所以简洁来说就是当a[i].f/a[i].j最大时,是我们最佳贪心策略

代码

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int M=100005;
struct cat{int f,j;double tot;//f/j的值
}a[M];
bool cmp(cat x,cat y){//将tot排序处理if(x.tot<y.tot)return false;return true;
}
int main(){int m,n;scanf("%d %d",&m,&n);for(int i=1;i<=n;i++){scanf("%d %d",&a[i].f,&a[i].j);a[i].tot=a[i].f*1.0/a[i].j;}sort(a+1,a+1+n,cmp);double sum=0;for(int i=1;i<=n;i++){if(m>=a[i].j){m-=a[i].j,sum+=a[i].f;}else{double id=m*1.0/a[i].j;sum+=a[i].f*1.0*id;break;//最后处理剩下的m}}printf("%.3lf",sum);
}

贪心之老鼠与猫的交易(详细分析)相关推荐

  1. java共识算法_PBFT共识算法详细分析及Java实现

    PBFT共识算法详细分析及Java实现 为什么写这个 最近研究了区块链相关的一些东西,其实就三大块: 分布式存储(去中心) 共识机制 安全加密 分布式存储,就是一个分布式数据库,每个节点都保存一份副本 ...

  2. Clickhouse 以太坊分析:交易日志分析

    概述 读者可前往我的博客获得更好的阅读体验. 在上一篇中,我们介绍了如何使用 Clickhouse 进行基础的信息提取,这些信息往往依赖于以太坊底层机制,我们只能获得如 ETH 转账. gas 等信息 ...

  3. 转股票中KDJ线的详细分析

    KDJ即随机指标. 原理:用目前股价在近阶段股价分布中的相对位置来预测可能发生的趋势反转. 算法:对每一交易日求RSV(未成熟随机值) RSV=(收盘价-最近N日最低价)/(最近N日最高价-最近N日最 ...

  4. Yolov1目标检测算法详细分析

    Yolov1目标检测算法详细分析 Yolov1介绍 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名的又一大作,起了一个很娱乐化的名字: ...

  5. 详细分析本机号码一键登录原理

    详细分析本机号码一键登录原理! 很多 APP 的目前都支持「本机号码一键登录」功能.本机号码一键登录是基于运营商独有网关认证能力推出的账号认证产品.用户只需一键授权,即可实现以本机号码注册/登录,相比 ...

  6. linux shell数据重定向(输入重定向与输出重定向)详细分析

    转载自: linux shell数据重定向(输入重定向与输出重定向)详细分析 - 程默 - 博客园 http://www.cnblogs.com/chengmo/archive/2010/10/20/ ...

  7. Blueprint代码详细分析-Android10.0编译系统(七)

    摘要:Blueprint解析Android.bp到ninja的代码流程时如何走的? 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Andro ...

  8. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01 写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是 ...

  9. C语言中的static 详细分析

    google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...

最新文章

  1. HDU 4864 Task(2014多校--贪心)
  2. springMVC3.0(文件上传,@RequestMapping加参数,@SessionAttributes,@ModelAttribute,转发,重定向,数值获取,传参,ajax,拦截器)
  3. JSP页面中的pageEncoding和contentType两种属性
  4. Cisco路由器密码恢复
  5. 设置MySQL排序方式_设置MySQL设置字符集和排序方式
  6. 【测试方法篇】效率测试
  7. 100个最受欢迎的机器学习课程视频
  8. 一条拼了40min的hql引发的思考
  9. aria2 配置教程
  10. 使用Reverse SSH Tunnel实现内网穿透的可行性方案
  11. c语言 continue什么意思,continue在C语言中什么意思?
  12. 网页设计语言html做思维导图,HTML思维导图
  13. 【多场景建模】CIKM2021 阿里妈妈多场景CTR预估模型STAR 论文精读
  14. IPFS何时落地应用?FIL价值破千?
  15. Photoshop菜单中英文对照表
  16. [GO]学习新语言之卡塔练习--猜数字
  17. 计算机处理器i5和i7,i5与i7有什么区别 酷睿i5和i7区别汇总【详细介绍】
  18. request+python : shuold be true判等的问题
  19. 如何安装和设置Eufy Lumos Wi-Fi智能灯泡
  20. 发卡小程序源码,自动发卡小程序

热门文章

  1. 如何把查询出的结果按姓氏笔画排序
  2. Intellij IDEA全局搜索失效
  3. 清理xcode模拟器_Xcode 清理存储空间
  4. Springboot使用杂谈
  5. 岁月的剪影【十月再不动就发霉了】
  6. C语言中for语句执行顺序
  7. 基于ROS机器人的3D物体识别与三维重建(一) 介绍篇
  8. CSDN文章打包下载
  9. 调用链追踪系统在伴鱼:实践篇
  10. TechBullion:USDD 或将成为全新避险资产