题目:
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
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.
分析:
将输入都按照效率排序,这里用到结构体。
用sort函数将a按照s的大小排序。
在sum比m小的情况下,选择这一项。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct aa {
int j;
int f;
double s;
};
aa a[2001];
bool b (aa x,aa y){
return x.s>y.s;
}
int main() {
int m,n;
while (cin>>m>>n) {
if (m==-1&&n==-1) {
break;
}
for (int i=0; i<n; i++) {
cin>>a[i].j>>a[i].f;
a[i].s=(double)a[i].j/a[i].f;
}
sort(a,a+n,b);
double sum=0;
for (int i=0; i<n; i++) {
if (a[i].f<m) {
m-=a[i].f;
sum+=a[i].j;
}
else {
sum+=a[i].s*m;
m=0;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}