【发布时间】:2015-04-19 12:03:37
【问题描述】:
我有一个关于背包问题的变体,我正在努力寻找一个有效的解决方案。
假设您有多个项目组。每个组可以有任意数量的项目,每个项目都有一个值和权重。问题是要找到具有最大总价值、重量
也就是说,假设您有数百种物品可供挑选,但您必须带一份三明治、一份饮料、一份小吃、一个手电筒等。不仅是您不能从任何组中挑选超过一件,而是如果有 g 个组,你必须在一天结束时得到正好 g 个项目。
看起来这应该比基本问题更快,因为很多组合都是无效的,但我正在努力寻找解决方案。
【问题讨论】:
-
您的问题似乎有缺陷。如果准确选择
g物品的要求和重量限制冲突怎么办? -
一个简单(但“组”数量呈指数增长)的解决方案是为每个组添加布尔维度,以指示是否从该集合中选择了一个项目。
-
@Lingxi - 好点。假设我们知道(因为我们可以很容易地提前确认)至少存在一种解决方案。
-
@amit - 所以只是跳过已经使用的组中的项目?这样会不会冒着创建次优答案和创建不是每个组都代表的答案的风险?
标签: algorithm knapsack-problem