背包
背包
一、01背包
对前i个物品,都有选或不选的01状态。
1 | for(int i=1; i<=n; i++) |
二、完全背包问题
每种物品可无限取用。
1 | for(int i=1; i<=n; i++) |
三、多重背包问题
每种物品有限取。
(一)二进制优化
1 | for(int i=1; i<=n; i++) |
(三)单调队列优化
三、混合背包
第一类物品只能用1次(01背包);
第二类物品可以用无限次(完全背包);
第三类物品最多只能用 $S_i$次(多重背包);
1 | if(s<0) s=1; |
将混合背包转化位多重背包问题。
四、二维背包
有两个限制,设置二维数组,两层遍历。
1 | for(int i=1; i<=n; i++) |
五、分组背包
物品分为n组,每组只能选一个。
1 | for(int i=1; i<=n; i++) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风雨天一阁📜!