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
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
double j,f,ss;
};
bool cmp(node a,node b)
{
if(a.ss>b.ss)
return true;
else return false;
}
int main()
{
double m,sum;
int n;
while(scanf("%lf%d",&m,&n))
{
if(n==-1||m==-1)break;
node a[n];
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].j,&a[i].f);
a[i].ss=a[i].j/(a[i].f);//算出每单位花生需要多少猫粮,即性价比
}
sort(a,a+n,cmp);
sum=0;
for(int i=0;i<n;i++)
{
if(m>=a[i].f)
{
sum+=a[i].j;
m-=a[i].f;
}
else
{
sum+=m*a[i].j/a[i].f;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}