/**
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<iostream>
#include<algorithm>
#define maxsize 1000
using namespace std;
struct node{
int w;
int v;
double r;
};
int cmp(node a,node b)
{
return a.r>b.r;
}
int main()
{
int m, n;
while(cin>>m>>n)
{
if(m==-1&&n==-1)
break;
node s[maxsize];
int i,j;
for(i=0;i<n;i++)
{
cin>>s[i].w>>s[i].v;
s[i].r=(s[i].w)*1.0/s[i].v;
}
sort(s,s+n,cmp);
double sum=0;
for(i=0;m>0&&i<n;i++)
{
if(s[i].v<m)
{
sum+=s[i].w;
m-=s[i].v;
}
else
{
sum+=m*s[i].r;
break;
}
}
printf("%.3f\n",sum);
}
return 0;
}