HDU 1009 FatMouse' Trade(贪心)

来源:互联网 发布:火影忍者ol精炼数据 编辑:程序博客网 时间:2024/05/16 08:54

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009

小白上的部分背包问题,这里从数学的角度可以认为老鼠能得到的与能兑换到的javabean成正比,与需要付出cat food成反比,因此,得到的粮食/需要付出的猫粮越大,表示这个兑换方案更好,相当于利润。所以我肯定会选择优先兑换最优方案的,一直到无法兑换完全了,就只能兑换部分了,也就是把剩下的猫粮*单位猫粮所能兑换的javabean。

#include<stdio.h>#include<algorithm>using namespace std;struct Node{    int in,out;    double benefit;} Node[1005];bool cmp(struct Node x,struct Node y){    return x.benefit>y.benefit;}int main(){    int m,n;    while(~scanf("%d%d",&m,&n))    {        if(m==-1&&n==-1)            break;        for(int i=0; i<n; i++)        {            scanf("%d%d",&Node[i].in,&Node[i].out);            Node[i].benefit=(double)Node[i].in/Node[i].out;        }        sort(Node,Node+n,cmp);        double ans=0.0;        for(int i=0; i<n; i++)        {            if(m>=Node[i].out)            {                ans+=Node[i].in;                m-=Node[i].out;            }            else            {                ans+=m*Node[i].benefit;                break;            }        }        printf("%.3lf\n",ans);    }    return 0;}


2 0