题目大意:
FatMouse准备了M磅猫粮,准备和守卫在仓库门口的猫交换JavaBean。仓库有N个房间,第i个房间有J[i]磅JavaBean,需要F[i]磅猫粮。FatMouse不必全部交换,他可以按比例交换。请计算他最大可以换多少JavaBean。
输入:
M,N
接下来的N行是J[i]和F[i]
解题思路:
简单的贪心题,选择性价比高的。最后不够的,不必取整。
代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct food
{
int j;
int f;
double ac;
};
int main()
{
int M,N,i,j,index;
while(cin>>M>>N,N!=-1||M!=-1)
{
index=0;
double sum=0.0;
food *p=new food[N];
for(i=0;i<N;i++)
{
cin>>p[i].j>>p[i].f;
p[i].ac=double(p[i].j)/double(p[i].f);
}
for(i=0;i<N-1;i++)
{
index=i;
food tmp;
for(j=i+1;j<N;j++)
{
if(p[j].ac<p[index].ac)
index=j;
}
tmp=p[i];
p[i]=p[index];
p[index]=tmp;
}
for(i=N-1;i>=0;i--)
{
if(M>=p[i].f)
{
M=M-p[i].f;
sum=sum+p[i].j;
}
else
{
if(M!=0)
{
sum=sum+p[i].ac*M;
M=0;
}
}
}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
delete []p;
}
return 0;
}