hdu 1009 FatMouse' Trade

题目来源:HDU 1009

简单题目分析:
小老鼠有M磅猫食,猫监管着若干存储javabean的仓库,小老鼠所要做的就是用猫食来和它们交易,每个仓库有J磅javabean,与此对应的是,小老鼠要用F磅猫食来交换这J磅javabean,值得一提的是,老鼠并不一定要兑换某个仓库内的全部javabean,而是可以兑换一部分(两者依旧成线性关系,J*a%磅javabean需要F*a%磅猫食来交换),问小老鼠最多能交换到多少磅javabean。
思路:
简单的贪心,每次先交换J/F比值最大(意味着单位磅猫食能换到最多javabean)的仓库即可,实现方法:sort结构体排序。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <stack>

using namespace std;

struct whouse
{
    int J;
    int F;
    double rate;
};

bool cmp(whouse a,whouse b)
{
    return a.rate>b.rate; //按比值排序
}

int main()
{
    int M,N;
    while( ~scanf("%d %d",&M,&N) && M!=-1 && N!=-1 )
    {
        double maxsum=0;
        whouse temp[N];
        int i;
        for(i=0;i<N;++i)
        {
            scanf("%d %d",&temp[i].J,&temp[i].F);
            temp[i].rate=(double)temp[i].J/temp[i].F;
        }
        sort(temp,temp+N,cmp);
        for(i=0;i<N;++i)
        {
            if(M>=temp[i].F)
            {
                maxsum+=temp[i].J;
                M-=temp[i].F;
            }
            else
            {
                maxsum+=M*temp[i].rate;
                break;
            }
        }
        printf("%.3lf\n",maxsum);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值