揹包問題

來自著名的揹包九講,算是筆記吧。

n件物品,揹包體積V、質量U,物品體積a[i]、質量b[i]、價值c[i],求最大價值。

1. 01揹包

一種物品只有一件,可選可不選

f[i][v] = max(f[i-1][v], f[i-1][v-a[i]]+c[i])
i 順序,v 逆序,空間複雜度可以降低一維

2. 完全揹包

每種物品無限多

f[i][v] = max(f[i-1][v], f[i-1][v-a[i]]+c[i])

01揹包的v 也改爲順序即可,空間一維即可

或者雖然物品無限多,但是由於揹包有限,所以每種物品可選數量都有上限,可以轉化爲如下多重揹包

3. 多重揹包

每種物品數量有限

①一種物品可選k件,拆分爲k件物品,然後01揹包解決

②二進制拆分,轉化爲01揹包,同上一種都是拆分,效率高了很多

4. 混合揹包

以上三種問題的混合,if 條件判斷即可。

5. 二維揹包

物品有兩維屬性

f[i][v][u] = max(f[i][v][u], f[i][v-a[i]][u-b[i]]+c[i])
多一維多一層循環即可,或者可以同01揹包一樣空間複雜度降低一維。

6. 分組揹包

每組最多隻能選一個

f[k][v] = max(f[k-1][v], f[k-1][v-a[i]]+c[i])<span style="white-space:pre">	</span>//i屬於第k組
三重循環,組,屬性,i 屬於組

7. 有依賴的揹包問題

8. 泛化物品


9. 變化


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章