我很好奇是否可以修改(或使用) 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
答案 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] },
为每个i
和j
提供项目0..i-1
的最小值,以使权重至少为j
。 infinity
应该是一个足够大的值,以便任何合法值都小于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
。