FatMouse' Trade(贪心)

FatMouse’ Trade

题意:
FatMouse准备了M磅猫粮,它想和守卫仓库的猫进行交易,因为仓库里有它最爱吃的食物Javabean。
仓库里有N个房间,在第i间房间里有J[i]磅Javabean,需要用F[i]磅猫粮来进行交换。FatMouse不必买在房间里的全部Javabean,他可以给猫F[i]*a%磅猫粮,来换取J[i]*a%磅的Javabean,其中a是一个实数。现在FatMouse给您布置家庭作业,请您告诉他,他最多能够获得多少磅Javabean。
输入
输入包含多个测试用例。每个测试用例的第一行给出两个非负整数M和N,接下来的N行每行给出两个非负整数J[i]和F[i],最后一个测试用例是两个-1,所有整数的值不超过1000。
输出
对于每个测试用例,在一行上输出一个3位小数的实数,这个实数是FatMouse能够通过交易得到的最大数量的Javabean。

题解:用 J[i] 除以 F[i],结果为 v[i];然后,对 v 写 cmp 按由大到小的顺序进行排序。最后在加个百分比就好了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#define ll unsigned long long
const int inf=0x3f3f3f3f;
using namespace std;
struct node{
	double j;
	double f;
	double v;
}a[2000];
bool cmp(node x,node y)
{
	return x.v>y.v;
}
int main()
{
	int M,N;
	while(cin>>M>>N,M!=-1&&N!=-1)
	{
		double sum=0;
		for(int i=1;i<=N;i++)
		{
			cin>>a[i].j>>a[i].f;
			a[i].v=a[i].j/a[i].f;
		}
		sort(a+1,a+1+N,cmp);
		int k=1;
		for(int i=1;i<=N;i++)
		{
			if(M>a[i].f)
			{
				sum+=a[i].j;
				M-=a[i].f;
			}else{
				sum=sum+M*a[i].v;
				break;
			}
		}
		printf("%.3f\n",sum);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值