题目:有 m 元钱,n 种物品;每种物品有 j 磅,总价值 f 元,可以
使用 0 到 f 的任意价格购买相应磅的物品,例如使用 0.3f 元,可以购买 0.3j 磅物
品。要求输出用 m 元钱最多能买到多少磅物品
使用 0 到 f 的任意价格购买相应磅的物品,例如使用 0.3f 元,可以购买 0.3j 磅物
品。要求输出用 m 元钱最多能买到多少磅物品
算法思想:,每次都买性价比最高的产品,性价比的计算公式为(重量\价格),性价比的含义为用最少的钱买到最多的东西
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct goods{
double Weight;
double Value;
double xingjiabi; //性价比,重量/价值
bool operator <(const goods &A) const{
return xingjiabi > A.xingjiabi;
}
}buf[1000];
int main()
{
double m; //m元钱
int n; //n种物品
cout<<"输入m元钱,n种物品"<<endl;
while(cin>>m>>n){
//cout<<m<<endl<<n<<endl;
if(m == -1 && n== -1) break;
for(int i=0; i<n; i++){
cin>>buf[i].Weight>>buf[i].Value; //输入i种物体的重量和价值
buf[i].xingjiabi = buf[i].Weight / buf[i].Value; //计算性价比
}
sort(buf,buf+n); //按性价比降序排列
int idx = 0; //当前货物下表
double sumWeight = 0; //累加所能得到的总重量
while(m>0 && idx < n){ //循环条件为,既有物品剩余(idx < n)还有钱剩余(m > 0)时继续循环
if(m > buf[idx].Value ){
sumWeight += buf[idx].Weight; //若能买下该种物品的全部物品
m -= buf[idx].Value;
}else{
sumWeight += buf[idx].Weight * m / buf[idx].Value; //按性价比买东西
m = 0; //钱全部花完
}//若能买下该种物品的部分物品
idx++; //继续下一个物品
}
cout<<"所得到的总重量:"<<sumWeight<<endl;
}
return 0;
}