题目分析
题意
胖老鼠准备了M磅猫粮与看守JavaBean仓库的猫做交易。仓库有N个房间,第i个房间有J[i]磅JavaBean并且需要F[i]磅猫粮,它不必换得房间里的所有JavaBean,可以换得同等猫粮比例的JavaBean,求得它最多能换得多少JavaBean。
思路
每磅猫粮换得的JavaBean多的房间,优先选择,最终能换得最多的JavaBean
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 1500
struct node{
double rv;//指价值
double rf,rj;//rf指猫粮,rj指JavaBean
}s[MAX];
bool cmp(node a,node b){
return a.rv>b.rv;
}
int main(){
//freopen("TXA.txt","r",stdin);
int N;
double M,ans;
while(~scanf("%lf%d",&M,&N)){
if(M==-1&&N==-1)
break;
for(int i=0;i<N;i++){
scanf("%lf%lf",&s[i].rj,&s[i].rf);
s[i].rv=s[i].rj/s[i].rf;
}
sort(s,s+N,cmp);
ans=0;
for(int i=0;i<N;i++){
if(M<s[i].rf){
ans+=s[i].rj*(M/s[i].rf);
break;
}else{
ans+=s[i].rj;
M-=s[i].rf;
}
}
printf("%.3lf\n",ans);
}
return 0;
}