解题思路:按照每磅猫粮能换多少豌豆的性价比进行由大到小的排序,先将性价比大的交换一下,最后剩的猫粮再按照性价比交换一定数量的豌豆
代码实现:
#include <iostream>
#include<algorithm>
using namespace std;
struct room{
int get,put;
double ave;
}a[1005];
bool cmp(room r1,room r2)
{
return r1.ave>r2.ave;
}
int main()
{
int cat,n,i;
double bean=0;
while(cin>>cat>>n){
if(cat==-1&&n==-1)
return 0;
for(i=0;i<n;i++)
{
cin>>a[i].get>>a[i].put;
a[i].ave=(double)a[i].get/a[i].put;
}
sort(a,a+n,cmp);
for(i=0;i<n&&cat>0;i++)
{
if(cat>=a[i].put)
{
cat-=a[i].put;
bean+=a[i].get;
}
else{
bean+=cat*a[i].ave;
cat=0;
}
}
printf("%.3lf\n",bean);
}
return 0;
}
遇到的bug:cat和n为-1的情况没有考虑进去