HDU 1009

http://acm.hdu.edu.cn/showproblem.php?pid=1009

题目大意
老鼠有M磅catfood,有N个房间。老鼠用catfood交换javabeans,交换的方式有两种,一种是用f[i]交换j[i],还有一种是等比交换。
要求换取最多的javabean,那么优先选取j[i]/f[i]比值大的,不能取完的部分等比交换。
开一个结构体,存储f,j,rate,把rate按降序排序一下即可。

#include<iostream>
#include<algorithm>
#define N 1004

using namespace std;

struct node{
    int f,j;
    double rate;
};
node w[N];

bool cmp(node a,node b)
{
    return a.rate>b.rate;
}
int main()
{
    double m,max;
    int n;
    while(cin>>m>>n && m!=-1 && n!=-1)
    {
        for(int i=0;i<n;i++)
        {
            cin>>w[i].j>>w[i].f;
            w[i].rate=1.0*w[i].j/w[i].f;    
        }
        sort(w,w+n,cmp);
        max=0;
        for(int i=0;i<n;i++)
        {
            if(m>=w[i].f)
            {
                max+=w[i].j;
                m-=w[i].f;
            }
            else
            {
                max+=m*w[i].rate;
                break;
            }
        }
        printf("%.3lf\n",max);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hjq_xidian/article/details/52675799