第一道贪心算法 题目链接 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; }