由于每堆金币可以任意拆分,所以这道题其实是个贪心问题而不是背包问题。
先将每组数据按照性价比(自己算!)由大到小排序,
如果当前容量足够则全装,不够就装满。
tip:要注意的是,不够的情况要用剩余容量*当前性价比,性价比是浮点型,整型与浮点型相乘容易出错哦!要进行转换,为了避免错误,可以把相关变量都设置为浮点型!
部分代码:
struct money//用结构体储存每堆金币信息
{
double m;//重量
double v;//价值
double x;//性价比
};
bool cmp(money a, money b){
return a.x>b.x;
}
int main()
{
接收
按性价比排序
1.容量够就全拿
2.容量不够就塞满
输出
}
return 0;
}