首页 > 学院 > 开发设计 > 正文

HDOJ 1009-FatMouse' Trade【贪心】

2019-11-06 07:38:22
字体:
来源:转载
供稿:网友

FatMouse' Trade

Time Limit: 2000/1000 MS (java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 73438    Accepted Submission(s): 25218PRoblem DescriptionFatMouse 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. InputThe 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. OutputFor 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 37 24 35 220 325 1824 1515 10-1 -1 Sample Output
13.33331.500 AuthorCHEN, Yue 题目描述就是一只老鼠有M份猫粮,这里有N个房间(就是N行数据),每个房间里都有J【i】份老鼠想要的食物 和 诱惑猫需要的猫粮 F[i],所以问你这只老鼠最多能够得到多少它想要的食物,每个房间的食物可以不拿完,他给猫的猫粮和猫需要的比例*房间有的J[i]的数量就是老鼠最后可以得到的。解题思路算出每个房间的比值,比值越大就说明越值得啊,排序之后比较即可。
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{	int aa,bb;	double jun;}shu[10000];bool cmp(node a,node b){	return a.jun>b.jun;}int main(){	int M,N;	while(scanf("%d%d",&M,&N)!=EOF){		if(M==-1&&N==-1)		break;		for(int i=0;i<N;i++){			int a,b;			scanf("%d%d",&a,&b);			double d=(double)a/b;			shu[i].aa=a;			shu[i].bb=b;			shu[i].jun=d;		}		sort(shu,shu+N,cmp);		//for(int i=0;i<N;i++)		// printf("%lf ",s[i]);		int dang=0;		double ans=0.0;		for(int i=0;i<N;i++){			if(dang+shu[i].bb<=M){				ans+=shu[i].aa;				dang+=shu[i].bb;			}			else			{				ans+=((double)(M-dang)/shu[i].bb)*shu[i].aa;				break	;			}		}		printf("%.3lf/n",ans);	}	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表