状压DP 再入门 !!!
昨天写状压DP被煞笔天海和死肥宅带鱼嘲笑了 Damn! 然而事实也是一些状压DP的经典问题我还不会…… 更烦人的是今天的多校是DP专场,AC自动机+DP 这个倒是常见的套路 树形DP ,反背包DP,树上匹配+DP,各种姿势的DP…… 老实说,我的DP是很弱的……连背包问题上的我个人觉得都不是很熟练…… 这里写一下状压DP入门的三道题,三道题其实差不了多少,但在难度上基本上是循序渐进的。 POJ 3254 Corn Fields 题意: 给你一个矩阵,让你种一些玉米,要求只能在给定的格子上种,并且相邻的格子不能同时存在玉米。 问方案数。 思路: 首先在输入的时候记录一下每一行不可种植的格子,将它压缩为二进制。 再是筛选出在同一行满足条件的所有状态,因为不能存在相邻格子,也就是 ( i & ( i << 1 ) = 0 ) 枚举每一行满足条件的所有状态,进而枚举下一行满足条件的所有状态,当 ( state[i] & state[j] ==0 )时,就表示上下状态的玉米不会相邻,这两行是满足题意的,所以只要将当前状态的数量加到下一行的状态中。…