FatMouse‘Trade HDU1009

本文介绍了一种使用贪心算法解决最大收益问题的方法,通过结构体存储房间内JavaBeans和所需猫食的比例,实现FatMouse在有限猫食下获取最多JavaBeans的目标。通过排序和迭代,算法确保每次交易都是最划算的。
摘要由CSDN通过智能技术生成

比较简单的贪心 主要应用结构体,寻求最大

FatMouse准备了M磅的猫食,准备与守卫仓库的猫交易,这些猫包含他最喜欢的食物,JavaBean。 
仓库有N个房间。第i间房间包含J [I]磅的JavaBeans,并且需要F [i]磅的猫粮。FatMouse不必交易房间内的所有JavaBeans,相反,如果他付给F [i] * 1磅的猫粮,他可能会得到1磅的JavaBeans。这里是一个实数。现在他正在为你分配这个作业:告诉他他可以获得的最大JavaBeans数量。 

输入输入由多个测试用例组成。每个测试用例都以包含两个非负整数M和N的行开始。然后N行包含两个非负整数J [i]和F [i]。最后的测试用例后面跟着两个-1。所有整数不大于1000。 
产量对于每个测试用例,在一行中打印一个真实数字,精确到3位小数,这是FatMouse可以获得的最大JavaBean数量。 
示例输入

5 3 
7 2 
4 3 
5 2 
20 3 
25 18 
24 15 
15 10 
-1 -1

示例输出

13.333 
31.500

代码:主要比较猫食与豆的大小,j和f法、用成员运算符都放入p数组中即可,只要明白事例的运算过程,就ok

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
double j,f,x;
}p[1100];
bool cmp(node c,node b)
{
return c.x>b.x;
}
int main()
{
int i,n;
double m,sum;
while(~scanf("%lf%d",&m,&n))
{
for(i=0;i<n;i++)
{
scanf("%lf%lf",&p[i].j,&p[i].f);
p[i].x=p[i].j/p[i].f;
}
sum=0;
sort(p,p+n,cmp);
for(i=0;i<n;i++)
{
if(m>p[i].f)
{
sum+=p[i].x*p[i].f;
m-=p[i].f;
}
else
{
sum+=p[i].x*m;
break;
}
}
printf("%.3lf\n",sum);}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值