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

贪心题

 

代码如下:

 

你可能感兴趣的:(HDU)