第一道贪心算法 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1009

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct node
{
    double x,y;
    double rate;
}f[100000];
int cmp(node a,node b)
{
    return a.rate>b.rate;

}
int main()
{
    int  n,m;
    int i,k;
    //int j[1005],f[1005];
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==-1&&m==-1)break;
        for(i=0;i<m;i++)
            {
                scanf("%lf%lf",&f[i].x,&f[i].y);
                f[i].rate=f[i].x/f[i].y;
            }
        sort(f,f+m,cmp);
        double left=n,sum=0;
        for(i=0;i<m&&left>0;i++)
        {
            if(left>=f[i].y)
            {
                sum+=f[i].x;
                left-=f[i].y;
            }
            else
                {
                    sum+=left*(f[i].x/f[i].y);
                    break;
            }
        }
        printf("%.3lf\n",sum);
    }
return 0;

}