标签:贪心思想
这个题的大意是:它有M猫食,N个房间,每个房间有f[i]猫食,j[i]量的 javabean,按一定的比例拿猫食来保护javabean。问一共有M猫食最多能保护多少javabean。
简单的贪心,只需按每个房间的javabean和猫食的比例从高到底排序,然后贪心即可。
代码中我处理了输入时f[i]等于0的情况,但交上去WA,我删去之后就AC了,看来没必要处理啊,,
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> using namespace std; struct food { int f,j; double ave; }s[1010]; int cmp(const food &a,const food &b) { return a.ave>b.ave; } int main() { int i,k,n,m; double ans; while(scanf("%d%d",&m,&n)) { if(m==-1 && n==-1) break; for(i=0;i<n;i++) { scanf("%d%d",&s[i].j,&s[i].f); s[i].ave=(double)s[i].j/s[i].f; } sort(s,s+n,cmp); ans=0; for(i=0;i<n;i++) { if(s[i].f<=m) { ans+=(double)s[i].j; m-=s[i].f; } else { ans+=s[i].ave*m; break; } } printf("%.3f\n",ans); } return 0; }
标签:贪心思想
原文地址:http://blog.csdn.net/u013068502/article/details/39012295