DHU 1009
-
题意:
- 老鼠想吃猫看守N个房间里的食物javaBean,那么它必须用自己拥有M的猫粮引诱猫离开。N个房间每个有j 个javaBean需要f 猫粮才能得到,当然也可按比例引诱。问怎么做才能得到最大数量的食物。
想得到最大的javaBean,那么肯定从最大比率的j/f开始,故用结构体对efficiency降序排序,然后依次引诱即可
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
class room
{
public:
int j,f;
double effi;
}r[1005];
double cmp(room a,room b)
{
return a.effi > b.effi;
}
int main()
{
// freopen("in.txt","r",stdin);
int N,M;
while(scanf("%d%d",&M,&N) != EOF && M != -1 && N != -1){
int i;
for(i = 0;i < N; i++){
scanf("%d%d",&r[i].j,&r[i].f);
r[i].effi = (double)r[i].j/r[i].f;
}
sort(r,r+N,cmp);
double ans = 0;
i = 0;
while(M != 0){
if(M > r[i].f){
ans += r[i].j;
M -= r[i].f;
i++;
}
else if(M <= r[i].f){
ans += M*r[i].effi;
M = 0;
}
}
printf("%.3lf\n",ans);
}
return 0;
}