關於01背包問題九講的優化?

我想請問一下,中間的部分, bound=max{V-sum{weight[i..n]},weight[i]}, 為什麼是sum{weight[i..n]},而不是sum{weight[i+1..n]},不是下面還要再減一次嗎?


大概是這麼想的吧。

因為解是最後一個值,即f[v],而對於f[v]和最後一件要放入的物品n來說,只需要知道f[v-cn]是多少就行;於是,同理,對f[v-c_{n}] 和物品n-1來說,需要的是f[v-c_{n}-c_{n-1} ]

於是,到物品i,也就是物品n-(n-i),需要的就是f[v-{c_{n}- ... -c_{i}}]

然而,有的物品可能是不會放進去的而且f[-1]是不存在的,於是,max{V-sum{c[i..n]},c[i]}。

就是不知道作者說的

這個優化之所以成立的原因請讀者自己思考。(提示:使用二維的轉移方程思
考較易。)

提示是不是這個意思。



推薦閱讀:

如何評價ZJOI2017 Day1?
尋路演算法中如何處理動態障礙物?
既然 ACM 選手發明了那麼多數據結構,那麼能不能寫一個「二階」程序,根據需求返回性能最好的一個來?
KM演算法的時間複雜度是O(n^3)還是O(n^2*m)?(n是點數,m是邊數)
如何評價NOI2016?

TAG:演算法 | 演算法導論書籍 | 演算法與數據結構 | ACM競賽 | 動態規劃 |