Hdu 1009 FatMouse' Trade解题报告

本文介绍了一个关于猫食与JavaBean交换的问题,并通过贪心算法来解决如何用有限数量的猫食换取最多数量JavaBean的问题。具体做法是先定义结构体存储每个房间的JavaBean与猫食数量,然后利用比较函数对这些房间按每单位猫食可换取的JavaBean数量进行排序,最后依次选择最优房间进行交换直到猫食用尽。
/**//*
input:
53
72
43
52
output
13.333
5个猫食,3个房间,第1个房间2个猫食换7个JavaBean,第2个房间3个猫食换4个JavaBean,第3个房间2个猫食换5个JavaBean;
最大量的JavaBean是7+5+(1/3)*4=13.333。
简单的贪心策略:每次以最小量的猫食换最大量的JavaBean,即每次取(J[i]/F[i])最大的J[i]将使换得的JavaBean量最大。
*/


#include
<algorithm>
#include
<iostream>
#include
<vector>
usingnamespacestd;

structJavaBeanCaCatFood
...{
intJavaBean,CatFood;
}
;

boolcmp(JavaBeanCaCatFooda,JavaBeanCaCatFoodb)
...{
return(double)a.JavaBean/a.CatFood>(double)b.JavaBean/b.CatFood;
}


boolrun()...{
intn,m;
cin
>>m>>n;
if(m==-1&&n==-1)returnfalse;

vector
<JavaBeanCaCatFood>JavaBeanCaCatFood(n);

inti;
for(i=0;i<n;i++)cin>>JavaBeanCaCatFood[i].JavaBean>>JavaBeanCaCatFood[i].CatFood;

sort(JavaBeanCaCatFood.begin(),JavaBeanCaCatFood.end(),cmp);

doubles=0,t=0;

for(i=0;i<n;i++)
...{
if(m>=JavaBeanCaCatFood[i].CatFood)//i房间的能全换
...{
m
-=JavaBeanCaCatFood[i].CatFood;
t
+=JavaBeanCaCatFood[i].JavaBean;
}

else
...{
t
+=JavaBeanCaCatFood[i].JavaBean*((double)m/JavaBeanCaCatFood[i].CatFood);//剩下不够全换
break;
}

}


printf(
"%.3lf ",t);

returntrue;
}


intmain()...{
while(run());
return0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值