HDU_1009_FatMouse' Trade

思路:最开始想的是求出每组 J[i] / F[i]记做R[i],然后从大到小排序,然后就判断M是否大于R[i]最大的那一组的J[i],如果大于则M-=J[i],否则就是M*R[i]。但是写了一会儿后发现代码能力实在太弱写不粗来了。。。于是就盗了一份别人的代码。

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int j;
    int f;
    double r;
}s[1005];
bool cmp(node a,node b)
{
    return a.r>b.r;
}
int main()
{
    int m,n;
    int i;
    while(cin>>m>>n&&(n!=-1||m!=-1))
    {
        for(i = 0;i < n;i++)
        {
            cin>>s[i].j>>s[i].f;
            s[i].r = (double )s[i].j/s[i].f;
        }
        sort(s,s+n,cmp);
        double sum = 0;
        i = 0;
        while(m&&i < n)
        {
            if(m > s[i].f)
            {
                sum += s[i].j;
                m-=s[i].f;
            }
            else
            {
                sum += (double)m/s[i].f*s[i].j;
                m = 0;
            }
            i++;
        }
        printf("%.3f\n",sum);
    }
    return 0;
}

 

posted on 2019-03-16 16:53  Rating  阅读(84)  评论(0)    收藏  举报

导航