HDU 1009

来源:互联网 发布:淘宝会员分几个等级 编辑:程序博客网 时间:2024/06/06 00:53

这道贪心题目类型跟上次不同,不是活动安排,题目大意是:有m个猫粮,n个房间,下面n组数据,每组两个,分别代表的是:把猫粮放到房间里能得到多少价值,第二个数是一个房间放的猫粮!


#include <iostream>

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
using namespace std;
const int maxn=1005;
int m,n;


struct node
{
    int x;
    int y;
    double r;
}p[maxn];


int cmp(node a,node b)
{
    return a.r>b.r;//根据这个比率来,越小相差越小
}


int main()
{
    while(scanf("%d%d",&m,&n),(n+m)!=-2)
    {
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&p[i].x,&p[i].y);
            p[i].r=(p[i].x*1.0)/p[i].y;
        }
        sort(p,p+n,cmp);
        double sum=0;
        for(int i=0; i<n&&m>0; i++)
        {
            if(m>=p[i].y)
            {
                sum+=p[i].x;
                m-=p[i].y;
            }
            else
            {
                sum+=m*p[i].r;
                m=0;
            }
        }
        printf("%.3lf\n",sum);
    }
    return 0;
}