假设一个常规的背包问题:你有一个权重约束,C
,Value
和Weight
(V, W)
的项目数。您希望最大化V
而W
位于C
之下。在这个问题中,每个项目只能有一个。
但这个问题还有一个问题。你想拥有各种各样的物品。假设问题表明您希望拥有至少5个(或任意数量)的不同项目。如果解决方案包含少于5个不同的项目,则答案无效。有没有解决这个问题的方法?
答案 0 :(得分:0)
这只是另一种形式的约束,所以让我们看看权重(最多C权重)和多样性(至少5个不同项目)的差异:
首先要注意的是,使用附加约束需要无效/无法解决的概念,因为如果没有5个不同的项满足权重约束,则没有解决方案。
一旦定义了返回某些invalid
结果的方法,它就非常接近标准的背包问题。在递归中,只需传递剩余允许的权重和当前多样性。在递归锚点情况下,检查Diversity并返回invalid
如果Diversity不符合要求,否则返回结果,就像在正常的背包问题中一样。检查invalid
的递归结果并对其进行相应处理。