我搜索了这种类型的算法并且红了很多东西,但我无法找到我正在寻找的东西。
所以,我去购物,我有x钱,我的卡车可以承受重量,每件物品都有额外的重量和价格。输出应该给出最大的奖励积分,使得所选物品的总重量不超过卡车的容量和我必须花的钱!
我可以在这里使用一些帮助,你知道算法的名称吗?我该怎么办?我必须在C中做到这一点!
谢谢!
答案 0 :(得分:0)
你有什么尝试?
这些类型的问题通常属于优化或约束满足的范畴。
尝试为您的问题编写函数表达式,看看是否可以使用简单的微积分或单纯形法解决它。
答案 1 :(得分:0)
我知道背包问题的两个变种。 0-1版本不能包含分数权重(接受或保留),例如,我不能采取第二个最佳选择的一半。另一个版本则相反,允许使用小数项目。这个小差异非常显着,并且有利于分数版本。
分数版本可以通过贪心算法解决。您可以使用最有价值的“单价”尽可能多地购买物品。重复,直到你的卡车装满。
0-1版本有点难,因为无法通过简单的贪婪算法解决。举个例子,假设你的卡车可以携带800磅。我们可以选择
一个贪婪的算法将占据最终的1577.25美元 最佳值是3个书柜,表= 1600美元。
如果以上是小号背包版本,那么只需要将长凳和99磅的桌子/书柜放在一起,共计1775.25美元。
在0-1的情况下,我们需要使用类似动态编程的东西来检查所有解决方案。
答案 2 :(得分:0)
项目权重和项目价格是约束。奖金积分是目标。因此,您有一个多维背包问题(一个目标;两个约束)。众所周知的动态编程解决方案背包将概括,但复杂性随着约束的数量呈指数增长。