hdu 1009

#include"stdio.h"
#include"stdlib.h"

struct ln
{
    int j,f;
    double p;
}s[1005];

int cmp(const void *a,const void *b)
{
    return (*(ln*)a).p>(*(ln*)b).p?1:-1;
}

int main( )
{
    int m,n,i;
    double sum,sun;
    while(scanf("%d%d",&m,&n)&&(m!=-1||n!=-1))
    {
        sum=sun=0;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&s[i].j,&s[i].f);
            if(s[i].j==0)
                s[i].p=s[i].f;
            else
                s[i].p=(s[i].f*1.0)/s[i].j;
        }
        qsort(s,n,sizeof(ln),cmp);
        for(i=0;i<n;i++)
        {
            if(sun+s[i].f>m)
                break;
            sum+=s[i].j;
            sun+=s[i].f;
        }
        if(s[i].f!=0&&i!=n)//这里要注意,i==n的情况不合适,太坑爹了,这里居然忘了!
            sum+=(m-sun)/s[i].f*s[i].j;
        printf("%.3lf\n",sum);
    }
    return 0;
}

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

贪心题

代码如下:

原文地址:https://www.cnblogs.com/chaosheng/p/2497491.html