來自著名的揹包九講,算是筆記吧。
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. 變化
略