下面的一个很常用的模型就是覆盖的模型。
说白了就是一个东西,让你用几种东西覆盖,不允许重叠。问你覆盖满的情况有多少种。
这种状压DP就是按照比较长的那个方向划阶段。然后将一行的状态压缩。
对于两行之间的转移只有在两行可以互相转化的情况下才可以进行。所以就需要DFS。
这个DFS是重点,其核心就是找可以放的空档,然后把他们放进可以放的所有的东西。注意前后的影响和几行之间的相互影响就可以了。具体实现可以看我的前两篇解题报告。
这其实也是最常用的模型。有一种很神的动态规划就是叫基于连通性的状压压缩动态规划就是基于覆盖模型的。
覆盖模型当中有很多很恶心的东西。比如要你用L*R的骨牌覆盖。这样的话,状态的压缩有可能因此变成三进制甚至更高的进制。
那么现在总结一下为什么要状态压缩。其实,在我感觉,压缩的状态好比一个hash,如果我们不使用状态压缩的话。如果想保证转移,那就必须浪费大量的空间。而这些空间我们是无法承受的(相当于凭空增加一堆维)。
最后说一说应用,状压DP其实使用来统计方案个数的。有时候也用来统计覆盖的极值(如炮兵阵地)。这其中的应用有什么统计哈密顿回路的个数、二分图匹配的个数、拓扑排序的个数等等。
总之,精髓就是一定要现想好状态,然后再尝试将状态压缩,并且确定好哪些状态是有关联的,这样才能够更好的将问题分析得透彻,才能将问题彻底解决。
以上为我学习状压DP的一些的心得~
本文深入讲解了状压动态规划的基本概念及其在覆盖模型中的应用。文章详细解释了如何通过状态压缩减少内存消耗,并通过DFS实现状态间的转移。此外,还探讨了如何利用状压DP解决实际问题,例如统计哈密顿回路的个数、二分图匹配的个数等。
1087

被折叠的 条评论
为什么被折叠?



