题目大意:胖老鼠准备了几磅的猫粮,准备和守卫仓库的猫交易,里面装着他最喜欢的食物,爪哇豆。
仓库有 N 间。i-th房间包含J[i]磅的爪哇豆,需要F[i]磅的猫粮。FatMouse不必用房间里所有的爪哇豆来换取,相反,如果他付给F[i]1%的猫粮,他可能会得到J[i]1%磅的爪哇豆。这里有一个真实的数字。现在,他正在给你分配这个作业:告诉他他可以得到的最大数量的爪哇豆。
解题思路:题目要求换取最多数目的豆子,先用豆子的数量除以猫粮的数目,结果为一磅猫粮所能换取的豆子数目,豆子越多,性价比最高,之后用sort函数做出排序,依次选用性价比最高的,用猫粮换取,这样便能用相同的猫粮换取最多的豆子;
#include<iostream>
#include<algorithm>
using namespace std;
struct cat{
int x;//猫粮
int y;//豆子
double z;
};
bool cmp(cat a,cat b)
{
return a.z >b.z ;//性价比比较
}
int main()
{
double sum;
int a,b;
int i;
while(cin>>a>>b&&(a!=-1||b!=-1))
{
struct cat arr[1001]={0};
for(i=0;i<b;i++)
{
cin>>arr[i].x ;
cin>>arr[i].y ;
arr[i].z =(double)arr[i].x /(double)arr[i].y ;
}
sort(arr,arr+b,cmp);
i=0;
sum=0.0;
while(a!=0&&i<b)
{
if(a>arr[i].y )
{
sum+=arr[i].x ;
a=a-arr[i].y ;
}
else if(a==arr[i].y )
{
sum+=arr[i].x ;
break;
}
else
{
sum+=(((double)a/arr[i].y ))*(double)arr[i].x ;
break;
}
i++;
}
printf("%.3f\n",sum);
}
return 0;
}
遇到的问题:写的时候没有考虑到两个整型相除的结果为整型,求性价比时要用强制类型转换把猫粮数目与豆子数目转化为浮点型。