HDOJ 1009 FatMouse' Trade

这个题描述的看起来复杂,其实思路很简单,就是个贪心算法,想要得到最多的javabean,怎么分配猫粮。

题中给出了得到J[i]所需的猫粮F[i],那么只需算出j[i]/F[i],然后进行排序,从最大的开始依次计算就可以了。

#include<iostream>
#include<iomanip>
#include<algorithm>

using namespace std;

#define MAX 1000
//构建一个结构体,方便接受数据和进行排序
struct node
{
    double J;
    double F;
    double r;
}mouse[MAX];

bool cmp(node a,node b)
{
    return a.r>b.r;
}

int main()
{
    int M,N;
    while(cin>>M>>N&&M!=-1&&N!=-1)
    {
        //输入J[i],F[i],并计算他们的比值
        for(int i=0;i<N;i++)
        {
            cin>>mouse[i].J>>mouse[i].F;
            mouse[i].r=mouse[i].J/mouse[i].F;
        }
        //排序
        sort(mouse,mouse+N,cmp);
        double sum=0;
        //从最大的比值开始,计算能得到的最多javabean
        for(int i=0;i<N;i++)
        {
            if(M==0) break;
            if(M>=mouse[i].F)
            {
                sum=mouse[i].J+sum;
                M-=mouse[i].F;
            }
            else if(M<mouse[i].F)
            {
                sum=M*mouse[i].r+sum;
                break;
            }
        }
        cout.setf(ios::fixed);
        cout<<setprecision(3)<<sum<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/wanttifa/article/details/80939724