题目描述:老鼠去找猫用猫粮换咖啡豆,猫都住在一个仓库里面,里面有很多房间,每个房间都装得有咖啡豆j[i],但是需要缴纳一定的咖啡豆f[i],老鼠不需要全部拿完i-th间所有的咖啡豆j[i],如果它缴纳f[i]*a%的猫粮,就可以获得j[i]*a%的咖啡豆,所有的数据都是不超过1000的非负整数。
现在要求老鼠可以换到多少的咖啡豆,结果保留3位小数.
我们买东西都会遵循的一个原则:花费最少,收获最大,这个是解决这个题目的关键 .。
我们每次都尽量取完咖啡豆最多,消耗猫粮最少的房间的所有东西,对于比例的问题,应该是放在当所持有的猫粮少于房间所需要的猫粮时才会考虑。
由此引出一个关键步骤:排序。
设置一个结构体表示房间:
Struct Hourse{
int j;//里面的咖啡豆
int f;//需要的猫粮
}
我们排序的依据是咖啡豆与猫粮的比例,比例越高,那么这个房间就应该先被考虑。
构造一个比较函数cmp()
bool cmp(hourse a,hourse b){
if((a.j/(double)a.f)>(b