这道题和 部分背包问题 是一样的,典型的贪心类型
//HDOJ1009 The FatMouse's Trade
//和部分背包问题一样的思路
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Trade
{
int ji;
int fi;
double scale;
};
bool cmp(Trade a,Trade b)
{
return (a.scale > b.scale); //按照ji/fi的大小降序排列
}
int main()
{
Trade t[1000];
int M,N;
double _value;
while(cin>>M>>N)
{
if( (M == -1) && (N == -1) )
break;
for(int i=0;i<N;i++)
{
cin>>t[i].ji>>t[i].fi;
t[i].scale=double(t[i].ji)/t[i].fi;
}
sort(t,t+N,cmp);
_value=0.0;
i=0;
while(M>0 && i<N)
{
if(M >= t[i].fi)
{
_value += t[i].ji;
M -= t[i].fi;
}
else
{
_value += double(M)/t[i].fi*t[i].ji;
M=0;
}
i++;
}
cout<<setiosflags(ios::fixed);
cout<<setprecision(3)<<_value<<endl;
}
return 0;
}