该博客有大量复制内容,仅供自己学习、复习使用。
部分参考于:https://www.cnblogs.com/Tony-Double-Sky/p/9283254.html
简单介绍
状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式。
很多n*m矩阵问题都运用到了状压,同时,状压也很经常和BFS及DP连用,有了状态,BFS和DP就比较容易了。
状压其实是一种很暴力的算法,因为他需要遍历每个状态,所以将会出现2^n的情况数量
我们用二进制的每一位代表一个对象,
对于n个对象,一共有 (1<<n)-1 个状态,而对于第i个对象进行操作的时候是 1<<(i-1) 。
P2622 关灯问题II(状压BFS)
https://www.luogu.com.cn/problem/P2622
题解:
https://www.cnblogs.com/jiamian/p/12589267.html
P1879 [USACO06NOV]Corn Fields(状压DP)
https://www.luogu.com.cn/problem/P1879
题解:
https://www.cnblogs.com/jiamian/p/12590539.html
通过题目要求减少状态量
这可以说是状压的一大精华了。一般状压的题目会有大量的状态,枚举所有状态则需要大量的时间,时间承受不了,若和dp结合起来,dp数组开个三四维,空间也吃不消。
所以我们可以通过预处理状态,去掉不合法的状态,减少时空的需要
具体实现和STL中的map很相似:我们用一个序号来映射状态,开一个数组state[ ],state[cnt]表示第cnt个合法的状态是什么,然后枚举的时候直接枚举state数组就好了
P1896 [SCOI2005]互不侵犯(状压DP)
https://www.luogu.com.cn/problem/P1896
题解:
https://www.cnblogs.com/jiamian/p/12590683.html
P2704 [NOI2001]炮兵阵地(状压DP)
https://www.luogu.com.cn/problem/P2704
题解:
https://www.cnblogs.com/jiamian/p/12590708.html
值得一看的blog:
https://blog.csdn.net/u011077606/article/details/43487421
-
来源:https://www.cnblogs.com/jiamian/p/12590709.html