【问题标题】:knapsack with variety of items有各种物品的背包
【发布时间】:2017-06-30 06:13:31
【问题描述】:
假设一个普通的背包问题:你有一个重量限制,C,物品的数量有Value和Weight(V, W)。你想最大化V 而W 在C 之下。在这个问题中,您只能选择一项。
但问题还有一个额外的转折点。你想拥有各种各样的物品。假设问题表明您希望拥有至少 5 个(或任意数量)不同的项目。如果一个解决方案的不同项目少于 5 个,则答案无效。有没有办法解决这个问题?
【问题讨论】:
标签:
algorithm
knapsack-problem
【解决方案1】:
这只是另一种形式的约束,所以让我们看看 Weight(最多 C 权重)和 Diversity(至少 5 个不同的项目)有何不同:
- 重量开始时有效(空袋低于 C),而多样性开始时无效(空袋不包含 5 种不同的物品)。
首先要注意的是,在附加约束条件下,您需要一个无效/不可解的概念,因为如果没有 5 个不同的项目满足权重约束,则没有解决方案。
一旦你定义了返回一些invalid结果的方法,它就非常接近标准的背包问题。在递归中,只需传递剩余的允许权重和当前的多样性。在递归anchor情况下,检查Diversity,如果Diversity不满足要求则返回invalid,否则返回正常背包问题中的结果。检查invalid 的递归结果并进行相应处理。