各位国庆快乐哈,祝各位玩的开心,我们明天就开学了,就多放一天枯了55555.
愿有情人苦尽甘来最终两不辜负,愿保研边缘党成功上岸,愿我少掉几根头发╮(๑•́ ₃•̀๑)╭
这回讲完背包中的完全背包和多重背包和混合问题。
完全背包问题:每件物品无限多个,我们可以回想上次提到的01背包为什么从后向前遍历,是因为从后向前更新,后面的数组更新不会影响前面的排列。遇到完全背包可以反过来思考,让数组从前向后更新,就可以多次使用同一个物品。
基础的依然是滚动数组优化空间复杂度:O(VN)
还有一种二进制优化01背包的思想优化时间复杂度:O(Nlog[V/Ci])这个放在后面和多重背包一起讲。
这两种思想是常用的优化思路,要牢记并理解
多重背包问题:从简开始:
一个物品可以用Mi遍,那么最朴素的思想便是用Mi遍01背包复杂度O(NVMi)
既然看到多次使用的01背包,我们可以用到上面提过的二进制优化,把一个物品拆成如下个数(0,1,2,4,8,.....,2的n次方 <=mi)这样可以用logmi的复杂度遍历所有的使用个数
给出伪码O(NVlogMi)
思路的核心就是二进制优化。
那么有没有一种更为先进的方法优化呢?(前置科技:单调队列 前置典型例题:滑窗问题)
希望前面写过的单调队列优化终极版多重背包能够帮到你(1条消息) 多重背包究极版-单调队列优化!(acwing多重背包问题Ⅲ)_我们教练不会签到的博客-CSDN博客
小结:无论是01背包还是多重背包用的思路起点完全相同(除了单调队列)均使用滚动数组进行优化,这个过程中不断地寻找局部最优解,其中可以用二进制思想进行数量优化,没有顺序的要求,任何物品都能没有顾虑的加入(没有顺序要求)
混合背包问题:前三种组合,没啥能讲的,建议用函数,省事:
作为背包问题的几种基本组合的产物的简单组合,本身和之前提到的没有区别 ,只要基本功扎实,就能完全解决这种问题。
之后的几天还是以每日一题为主,等我学会了有依赖的背包再来总结一下qwq



