利用动态规划最小化无界背包

时间:2014-08-17 23:01:00

标签: algorithm dynamic-programming knapsack-problem

我很好奇是否可以修改(或使用) Unbounded背包问题的DP算法,以最小化背包中物品的总价值总权重至少一些最小约束C.


针对UKP最大化版本的自下而上的DP算法:

let w = set of weights (0-indexed)

and v = set of values (0-indexed)

    DP[i][j] = max{ DP[i-1][j], DP[i][j - w[i-1]] + v[i-1] }

for i = 0,...,N and j = 0,...,C

given DP[0][j] = 0 and DP[i][0] = 0

where N = amount of items

and C = maximum weight

DP[N][C] = the maximum value of items for a knapsack capacity of C 

我们能否最小化UKP?如果没有,任何人都可以提供另一种解决方案或技术来解决这样的问题吗?

谢谢,Dan

1 个答案:

答案 0 :(得分:3)

您将有新的重复发生

DP[i][j] (       j <= 0) = 0
DP[i][j] (i = 0, j >  0) = infinity
DP[i][j] (i > 0, j >  0) = min{ DP[i-1][j], DP[i-1][j - w[i-1]] + v[i-1] },

为每个ij提供项目0..i-1的最小值,以使权重至少为jinfinity应该是一个足够大的值,以便任何合法值都小于infinity

请注意,指定了所有DP[i][j] = 0的{​​{1}}。有时,索引j <= 0将为第二个索引生成负值。矩阵j - w[i-1]中的这些负指数j应该给出值0以使算法起作用。

此外,根据DP的定义,人们可能会期望DP[i][j]的值为非零,因为DP[i][0]对应的最小权重为0,但j=0对所有人来说都是DP[i][0] = 0 DP算法需要i