Hdu 1009 FatMouse' Trade解题报告

/*
input:
5 3
7 2
4 3
5 2
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 >
using   namespace  std;

struct  JavaBeanCaCatFood
{
    
int JavaBean,CatFood;
}
;

bool  cmp(JavaBeanCaCatFood a, JavaBeanCaCatFood b)
{
    
return (double)a.JavaBean/a.CatFood > (double)b.JavaBean/b.CatFood;
}


bool  run() {
    
int n,m;
    cin
>>m>>n;
    
if (m==-1 && n==-1return false;

    vector 
<JavaBeanCaCatFood> JavaBeanCaCatFood(n);

    
int i;
    
for(i=0;i<n;i++) cin>>JavaBeanCaCatFood[i].JavaBean>>JavaBeanCaCatFood[i].CatFood;
   
    sort(JavaBeanCaCatFood.begin(),JavaBeanCaCatFood.end(),cmp);
    
    
double s=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);        
    
    
return true;
}


int  main() {
    
while(run());     
    
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值