Greedy Mouse
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his
favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires
F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get
W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell
him the maximum amount of peanut he can obtain.
-
输入
- The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers W[i] and F[i] respectively. The test case is terminated by two -1. All integers are not greater than 1000. 输出
- For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain. 样例输入
-
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
样例输出
-
13.333 31.500
-
分析:
-
简单贪心,qsort排序加上贪心,就是答案。
-
代码:
-
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int x; int y; double rate; }; int cmp(const void *a,const void *b) { if((*(node *)b).rate-(*(node *)a).rate<0) return -1; } int main() { int m,n,i; double s; while(scanf("%d%d",&m,&n)!=EOF) { if(n==-1||m==-1) break; node *a=(node *)malloc(sizeof(node )*n); for(i=0;i<n;i++) { scanf("%d%d",&a[i].x,&a[i].y); a[i].rate=a[i].x*1.0/a[i].y; } qsort(a,n,sizeof(node),cmp); for(i=s=0;m>0&&i<n;i++) { if(a[i].y<=m) { s+=a[i].x; m-=a[i].y; } else { s+=m*a[i].rate; break; } } printf("%.3lf\n",s); } return 0; }