關於01背包問題九講的優化?
01-08
我想請問一下,中間的部分, 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]是多少就行;於是,同理,對和物品n-1來說,需要的是。於是,到物品i,也就是物品n-(n-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?