2019年10月2日训练日记

mac2022-06-30  22

最近一直再看状态压缩DP。我觉得状压DP就是利用二进制记录状态,利用位运算进行状态转移的一个完全暴力的算法。 最近看题总是看到一种题型就是给定一个n行m列的格子,往格子上放东西,问最多可以放多少,或者是在某个位置放一个,然后其上下左右都不能再放,或者是放一个特定形状的格子,这一类题都可以考虑使用状压DP求解,每一行用一个二进制数记录状态,每一位的0,1记录取或不取,拿或没拿,走过或没走过,可以用它的十进制做dp数组的下标,记录状态,进行状态转移。可以用几维记录对当前状态有影响的几个状态。 状压dp很多很多都可以写二重,三重甚至四重循环,但是不会超时,因为状压dp本身状态转移是可以剪去和很多种不符合条件的情况,大大降低了时间复杂度。 状压dp的原理比较好懂,但是我看的比较吃力应该是因为状压dp用的位运算很多,很巧妙,看的时候可能要反应好久每一个判断表示的是什么,位运算那块还需要好好补补,很多时候状态转移方程还是比较好推,但是表示不出来,也不能合理有效的去剪枝 ,这还是个问题,在多钻研几篇博客,理解理解。

最新回复(0)