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

无聊的贪心

View Code
#include <stdio.h>
#include <stdlib.h>
typedef struct L{
    int j,k;
    double w;
}L;
L kk[1001];
int cmp(const void*a,const void*b)
{
    L*c=(L*)a;
    L*d=(L*)b;
    return d->w > c->w ? 1 : -1 ;
}
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",&kk[i].j,&kk[i].k);
            kk[i].w=kk[i].j*1.0/kk[i].k;
        }
        qsort(kk,n,sizeof(L),cmp);
        int sum=0;
        double ans=0;
        for(int i=0;i<n;i++)
        {
            sum+=kk[i].k;
            ans+=kk[i].j;
            if(sum>=m){
                ans-=(sum-m)*kk[i].w;
                break;
            }
        }
        printf("%.3lf\n",ans);
    }
    return 0;
}