背包考前小结

背包问题

1、01背包:

一个物品取或不取,外层枚举第几个,内层枚举体积

注意降成一维时枚举体积要倒序。

 

2、完全背包

每种物品无限个。同上,只不过逆序改顺序(因为无限,则也要考虑当前层对答案的影响)

 

3、多重背包

可以看成01背包,只不过一种物品有多个,还是逆序循环体积,只不过多了层枚举个数。

可以二进制分解优化,从而转化为01背包。

 

4、混合以上三种背包

则多几个if语句,判断是哪种类型,分类讨论,代码同上

 

5、二维费用背包

只不过多了个状态而已,其他与上面一样。

有时候条件按隐含的方式给出:最多只能取M件物品,则可将每一件物品多加一维花费为1

 

6、分组背包

每组只能选一个,则可以看成01背包,要么这组选,要么不选。

循环还是逆序,只不过多了层组的循环,注意:逆序的V循环要在组的外面

 

7、有依赖性的背包

如果附件后无附件,只有一层主附关系,则可以对每个主件的附件分别进行01背包,最后再一起做01背包。

 

8、泛化物品

待填坑。。。

 

9、总结

灵活多变,多思考,多找性质,举一反三。

还有会求方案数的,可以多开一个数组记录一下。

 

posted on 2018-11-08 21:21  Frank-King  阅读(142)  评论(0编辑  收藏  举报