我在思考,
我想要对背包问题进行变体。
假设有原始问题,其中包含具有不同重量/价值的物品。
我的版本将与正常的重量/价值一起,包含一个“组”值。
例如:物品1 [5kg,$600,电子产品] 物品2 [1kg,$50,食品]
现在,有了这样一组物品,如何编写背包问题的代码,以确保仅选中每个“组”中的最多1个物品。
注意:
- 您不需要从该组中选择任何物品
- 每个组中有多个物品
- 您仍要最小化重量,最大化价值
- 组的数量是预定义的,以及它们的值。
此时我只是草拟出代码,并且选择使用动态方法。我了解常规背包问题的动态解决方案的想法,如何修改此解决方案以包含这些“组”?
KnapSackVariation(v,w,g,n,W)
{
for (w = 0 to W)
V[0,w] = 0;
for(i = 1 to n)
for(w = 0 to W)
if(w[i] <= w)
V[i,w] = max{V[i-1, w], v[i] + V[i-1, w-w[i]]};
else
V[i,w] = V[i-1, w];
return V[n,W];
}
这是我目前的成果,需要添加代码以便在解决问题时删除该组中的所有相应项目。