状压学习笔记
我好菜啊我居然到现在才学状压......
真的是菜得不行了qwq
另外补了补位运算,对于状压DP还是蛮重要的
状压就是状态压缩,就是把一个状态用一个数表示出来,类似于HASH算法
比如要表示一串灯的状态:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | -- |
状态 | 1 | 1 | 0 | 1 | 0 | 1 | -- |
贡献 | 32 | 16 | 0 | 4 | 0 | 1 | 53 |
于是这里的53就表示了110101这个状态,即第1、2、4、6这四盏灯亮着
现在我们有了表示状态的方法,但也许会想:上面用十进制表示二进制的数,枚举了全部的状态,DP起来复杂度岂不是很大?没错,状压其实是一种很暴力的算法,因为他需要遍历每个状态,所以将会出现 $ 2^n $ 的情况数量,不过这并不代表这种方法不适用:一些题目可以依照题意,排除不合法的方案,使一行的总方案数大大减少从而减少枚举。比如有些 $ m $ 很大但是 $ n≤10 $ 的时候。
学完之后就该做题了qwq
洛谷P2622关灯问题II
洛谷P1879玉米田
洛谷P1896[SCOI2005]互不侵犯