Problem Description
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
Input
Output
Sample Input
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
Sample Output
13.333
31.500
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
struct JavaBean
{
double F;
double J;
};
bool cmp(JavaBean x1, JavaBean x2)
{
return x1.J/x1.F>x2.J/x2.F;
}
JavaBean X[1010];
int main ( )
{
int M, N, i;
while (cin >> M >> N)
{
if (M == -1 && N == -1) break; //当输入为-1时结束程序
for (i = 0; i < N; i++) cin >> X[i].J >> X[i].F;//将输入放入数组中
sort(X, X+N, cmp);
double sum = 0.0;
for (i = 0; i < N; i++)
{
// cout << X[i].J << " " << X[i].F << endl;
//之前用的是if - else if 语句,一直不对,注意运行问题
if (M > X[i].F) { sum = sum + X[i].J; M -= X[i].F; }
else
{ sum = sum + X[i].J * M / X[i].F; break; }
}
cout << setiosflags(ios::fixed) << setprecision(3) << sum << endl;
}
return 0;
}