(hdu step 1.3.1)FatMouse' Trade(在收入需要一定的付出的情况下求最大收入)_帅气的东哥的博客-程序员秘密

技术标签: acm  ACM——夺金之路  

题目:


       

FatMouse' Trade

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5092 Accepted Submission(s): 1530
 
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
ZJCPC2004
 
Recommend
JGShining
 



题目大意:

       老鼠准备了M磅猫食,准备拿这些猫食跟猫交换自己喜欢的食物。有N个房间,每个房间里面都有食物。你可以得到J[i]但你需要付出F[i]的猫食。要你计算你有M磅猫食可以获得最多食物的重量。而且这里可以不必每一组都全换,可以按比例换。。。例如最后你只剩5块钱猫食。但是目前的一个选择是话10块猫食就能换取6个粮食。那么这时候你用5块猫食就能换取3个粮食



题目分析:

       这是一道简单的贪心题。对于这种获得收入的同时需要付出一些的情况下,计算最大收入。这种题一般是根据

收入和付出的比例来排一下序。然后根据这个比例从高到低进行选择




代码如下:

/*
 * a.cpp
 *
 *  Created on: 2015年1月28日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

const int maxn = 10005;

struct W {
	double get;//收入
	double pay;//付出的猫食
	double ave;//收入/付出比
} w[maxn];

bool cmp(W a, W b) {
	if (a.ave > b.ave) {
		return true;
	}

	return false;
}

int main() {
	int n;
	double m;
	while (scanf("%lf%d", &m, &n), n != -1 && m != -1) {
		int i;
		for (i = 0; i < n; ++i) {
			scanf("%lf %lf", &w[i].get, &w[i].pay);
			w[i].ave = w[i].get / w[i].pay;
		}

		sort(w, w + n, cmp);//贪心,对w按照get/pay进行降序排序

		double sum = 0;
		i = 0;
//		while(m >= 0){//不知道为什么这种写法就是不行.
//			if (m >= w[i].pay) {
//							sum = sum + w[i].get;
//							m = m - w[i].pay;
//						} else {
//							sum = sum + w[i].ave * m;
//							break;
//						}
//			i++;
//		}

		for (i = 0; i <= n - 1; i++) {
			if (m >= w[i].pay) {//如果当前剩余的猫食还足够的话
				sum = sum + w[i].get;//那就把那个房间的粮食全部买下
				m = m - w[i].pay;//并且手上见去相应的猫食
			} else {//如果现在手上的猫食已经不够
				sum = sum + w[i].ave * m;//那么就按比例拿去一定的猫食
				break;
			}
		}

		printf("%.3lf\n", sum);
	}

	return 0;
}



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/caihongshijie6/article/details/43238585

智能推荐

axios的使用_axios.min.js_so_t的博客-程序员秘密

axios在Vue中使用1.引入axios.js文件1.1 导入axios.min.js文件1.2 导入axios.min.js文件2 写好代码结构3 在方法中使用axios请求数据3.1 axios的几种请求方式3.1.1 get请求3.1.2 post请求3.1.3 put请求3.1.4 delete请求4 给初始化参数赋值显示1.引入axios.js文件1.1 导入axios.min.js文件&lt;script src="./axios.min.js"&gt;&lt;/script&gt;

pytest allure+Jenkins入门级教程_代码小怡的博客-程序员秘密

pytest介绍我们通过pytest框架把代码写好之后,可以用allure(测试报告工具)上传一个测试报告,然后可以把代码提交到Git上,通过jenkins进行一个集成(CI)。pytest是一个非常成熟的Python单元测试框架,主要的特点有以下几点:1.简单灵活,容易上手,文档丰富2.支持参数化, 可以细粒度地控制要测试的测试用例:3.能够支持简单的单 元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试( pytestrequests);4.p.

vue-router 2.0 改变的内容总结一下_老虎帅呆了的博客-程序员秘密

最近在学习个过程中遇到了不少坑点,整理一下摆出来让大家注意一下吧:2.x 版本的 vue-router 相比之前的0.7.x版本,有很多破坏性改变:一、通用 API 的修改1、The old router.go() is now router.push() 2、新的 router.go 类似 window.history.go() : 接受一个数值作为参数在历史

线性回归算法原理推导——最小二乘法直接计算参数矩阵_怎么计算最小二乘法的回归矩阵_志存高远脚踏实地的博客-程序员秘密

线性回归最小二乘法直接计算参数矩阵为了举例简单,假设银行的贷款系统计算一个人的额度时候,只受到年龄,每月固定收入的影响(当然实际情况要复杂的多),那么年龄和月固定收入对一个人的贷款额度的大小影响分别有多大呢?这个影响程度称之为参数。假设年龄和每月固定收入分别为x1,x2x_1,x_2x1​,x2​,年龄和每月固定收入对贷款额度的影响程度分别用参数θ1,θ2\theta_1,\theta_2θ1...

HTML5+CSS3 鼠标悬停3D立体图片效果_䦈咋的博客-程序员秘密

效果图:设置一个盒子,里面放两个div。2.div旋转并设阴影。3.加伪类,使鼠标移入这个盒子的时候div有动画效果。这样就完成应该是一个鼠标悬停立体图片的效果。...

web连接数据库时,报空指针java.lang.NullPointerException问题--可能的解决方式_Dyfearl的博客-程序员秘密

序言:好吧,第一次写程序员秘密,其实从一开始学计算机,到现在,快两年了,中间就不断的遇到问题,基本通过上这博客看的确实挺好的 一直想什么时候开始 把自己遇到的问题和解决方法都写下来,毕竟每次自己遇到麻烦的时候真心 心累对于像我这样的新手,或许一个小问题可以磨半天这次 总算开始写了 问题:写web时,需要用到数据库的数据,参着网上的方法自己写了一个数据库连接类,...

随便推点

关于2021年6月20日PMI认证考试缴费的通知_pmi缴费_congming2020的博客-程序员秘密

尊敬的各位考生, 目前2021年6月20日项目管理考试报名和审核工作已经结束,自2021年4月26日起,考生可登录个人账号查看报名和审核状态并完成缴费,缴费时间为2021年4月26日10:00——2021年4月30日24:00,请各位考生及时缴费。中国国际人才交流基金会​2021年4月26日...

Google资深工程师深度讲解Go语言-channel 通道 (十)_lxw1844912514的博客-程序员秘密

一.channelchannel buffered channel range.由发送方结束发送 理论基础:communication sequential process(csp) 不要通过共享内存来通信;通过通信来共享内存package mainimport ( "fmt" "time")func chanDemo() { c := make(chan int) go func() { for { n := &lt;-c fmt.Println(n)

/etc/fstab 只读无法修改的解决办法(转)_fstab只读无法修改_dragoo1的博客-程序员秘密

今天自己已开始做在虚拟机上做实验,增加了一个磁盘sdb1,而且也增加了自动挂载的功能/etc/fstab里增加了记录。后来自己把这个磁盘给删除了,再次重新启动服务器的时候,系统启动不了了。系统提示:按提示 输入 root的密码,进入以Repair filesystem 为提示符的界面。vi /etc/fstab后 提示,只读,也就是没权限修改。解决方案如下:于是输入 mount -o remount,rw /逗号前面无空格(切记),而且一定要有/这个表示重新...

如何用java编译_如何用Java编译.java文件?_任云舒的博客-程序员秘密

我有Eclipse生成的以下代码(.java文件).import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Display;public class HelloWorldSWT {/*** @param args*/public static void main(String[] args) {// TODO Auto...

Prolog教程 3_prolog里谓词名词中可以包含中划线吗_mwsong的博客-程序员秘密

事实 (facts) 注:斜粗体字表示Prolog的专有名词事实(facts)是prolog中最简单的谓词(predicate)。它和关系数据库中的记录十分相似。在下一章中我们会把事实作为数据库来搜索。谓词: Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。 事实的语法结构如下:pred(arg1

mjpg-streamer在树莓派上的使用(树莓派+usb摄像头)_Noriaki的博客-程序员秘密

使用mjpg-streamer可以实现远程监控,mjpg-streamer的优点是图像清晰延迟小,下边大概说一下使用它的步骤。1.更新一下软件包分两次输入sudo apt-get update  sudo apt-get upgrade2.重启之后开启摄像头:可以输入sudo raspi-config然后选择 ‘5 interfacing options’中的‘ca

推荐文章

热门文章

相关标签