至于0~1背包问题,
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
c [i]表示第i种货物的成本, w [i]表示第i种货物的价值。
我读了一篇文档,其中说时间复杂度可以是优化,特别是当V更大时。如下所示
i=1...N
v=V...0
可以更改为
i=1...n
bound=max{V-sum{w[i..n]},c[i]}
v=V...bound
这是什么意思?V(袋子的最大值)减去w [i]的总和(商品的价值)怎么样?
这个文档真的很混淆,或者出了什么问题?
答案 0 :(得分:1)
你没有说出你正在优化的复杂性。你在使用动态编程吗?如果是这样,这可能意味着您不需要为小的v值计算f[i][v]
,因为您不需要这些值来找到最佳值。
即使您将背景中的所有商品从i + 1
放到n
,您仍然有V - sum{c[i+1..n]}
的容量,所以您不需要解决子问题i
(限于货物1..i
),容量小于此值。
如果您需要更正式的答案,请详细说明问题以及所使用的算法。