例2.11 FatMouse' Trade - 九度教程第21题

题目:

时间限制:1 秒 内存限制:128 兆 特殊判题:否
题目描述:
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.
输入:
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.
输出:
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.
样例输入:
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
样例输出:
13.333
31.500

解析:

题目大意如下:有M元钱,N种物品;每种物品有J[i]磅,价值F[i]元。可以使用0到F[i]的任意价格购买相应磅的物品,例如使用 F[i]* a% 元,可以购买J[i]* a% 磅物品。要求输出用M元钱最多能买到多少磅物品。
        采用贪心策略,每次都买剩余物品中性价比(即重量价格比)最高的物品,直到物品被买完或者钱耗尽

大致思路:

构造结构体,按照性价比从大到小进行sort排序。采用贪心策略,for循环或者while循环依次遍历,每次都买性价比最高的物品。

代码:

#include<stdio.h>
#include<algorithm> //sort函数头文件
using namespace std;
struct goods{ //表示可买物体的结构体int j;    //该物品总重int f;    //该物品总价值double s; //该物品性价比bool operator < (const goods &A) const{//重载小于运算符,确保可用sort函数将数组按照性价比降序排列return s>A.s;}
}buf[1000];
int main()
{int m,n;while(scanf("%d%d",&m,&n)!=EOF){if(m==-1 && n==-1) //当m==-1且n==-1时跳出循环,程序运行结果{break;}for(int i=0;i<n;i++){scanf("%d%d",&buf[i].j,&buf[i].f);//输入buf[i].s=(double)buf[i].j/buf[i].f;       //计算性价比}sort(buf,buf+n);    //使各物品按照性价比降序排列/* for(int i=0;i<n;i++){printf("%d%d%f\n",buf[i].j,buf[i].f,buf[i].s);}*/int idx=0;          //当前货物下标double ans=0;          //累加所能得到的总重量while(m>0 && idx<n) //循环条件为,既有物品剩余(idx<n)还有钱剩余(m>0)时继续循环{if(m>buf[idx].f){m-=buf[idx].f;ans+=buf[idx].j;}               //若能买下全部该物品else{ans+=(double)m*buf[idx].j/buf[idx].f;m=0;}               //若只能买下部分该物品idx++;          //继续下一个物品}printf("%.3f\n",ans); //输出}return 0;
}

下面控制贪心策略的关键代码, 可以不用while循环,也可以用for循环控制

例2.11 FatMouse' Trade - 九度教程第21题(贪心算法)相关推荐

  1. Piggy-Bank - 九度教程第 102 题

    Piggy-Bank - 九度教程第 102 题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: Before ACM can do anything, a budget mus ...

  2. 质因数的个数 - 九度教程第54题

    质因数的个数 - 九度教程第54题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: 求正整数 N(N>1)的质因数的个数. 相同的质因数需要重复计算.如 120=22235 ...

  3. 不容易系列之一(九度教程第 94 题)

    不容易系列之一(九度教程第 94 题) 时间限制:1 秒 内存限制:128 兆 特殊判题:否 1.题目描述: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!做好"一件&q ...

  4. Excel排序 九度教程第4题

    题目链接 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行"Case i:",其中 i 是测试用例的编号(从1开始) ...

  5. 数制转换 九度教程第44题 a进制数转换为b进制数 不同进制之间相互转换

    题目链接 解题思路: 1.将a进制数转换成十进制数: 2.将十进制数转换成b进制数: 3.使用do while 循环,可以确保即使被转换数字是 0 ,程序也能正常工作. AC代码: #include& ...

  6. [贪心算法] 例6.1 FatMouse' Trade

    六 贪心算法 此类算法, 说是算法, 不如说是一种思想, 即每次选择当前最好的, 而不从整体上把握的思想. 题目描述:   FatMouse prepared M pounds of cat food ...

  7. 成绩排序 九度教程c语言,九度OJ 1089 数字反转

    题目分析: 使用队列存放每一位的数字,然后输出并计算得到反转数值,从而实现数字反转. 源代码: [cpp] #include #include using namespace std; int mai ...

  8. 九度oj 第1题 二维数组中的查找 何海涛:《剑指Offer:名企面试官精讲典型编程题》

    一.题目信息 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: ...

  9. 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)

    本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以                降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...

  10. 非常可乐(杭州电子科技大学第四届大学生程序设计竞赛)(九度2013年教程87题)

    题目描述:大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多 ...

最新文章

  1. Android 系统各种StreamType 的Volume关联和Mute设置
  2. singleton模式四种线程安全的实现
  3. 我犯了一个错误,您能指出吗?
  4. MyBatis创建SqlSession可以直接使用DefaultSqlSession 吗?
  5. 【Redis】redis开机自启动、设置守护进程、密码设置、访问权限控制等安全设置(redis默认端口6379)...
  6. 想和人脑一样智能? IBM 的芯片级模仿才是关键
  7. CentOS6.7 mysql5.6.33修改数据文件位置
  8. mysql锁表查询_Mysql upate 更新锁表还是锁行测试
  9. java web ssh jar_java web 汽车美容管理系统 ssh 毕设作品
  10. SQL注入学习part04:(结合sqli-libs学习:31-40关)
  11. int indexs=(int)(_v+0.5);
  12. RabbitMQ中Confirm确认与Return返回消息详解(八)
  13. php 判断字符串类型
  14. OpenGL编程指南 示例笔记(2)--独立地移动光源
  15. matlab图像处理中的错误--调用imhist报错
  16. 开源免费CRM云端的客户管理系统SuiteCRM简介(视频)
  17. 【菜gou的CS61A学习笔记10 Abstraction Trees】
  18. 桌面总是弹出计算机内存不足,电脑老是提醒内存不足怎么办
  19. Xcode里的-ObjC,-all_laod和-force_load的作用
  20. 从纹理中生成法线贴图

热门文章

  1. 190601每日一句
  2. Python 和 C++实现 九九乘法表
  3. 扇贝有道180911每日一句
  4. unity简单动画学习
  5. Atitit.java 反编译 工具  attilax 总结
  6. atitit.dw不能显示正确的百分比高度in dw的解决
  7. paip.提升用户体验---网站程序HTML,JS需要注意的地方
  8. paip..net VS2010提示当前上下文中不存在名称的解决
  9. 对话Man Group:对冲基金的达尔文式竞争
  10. Rust: 如何读写中文字符?