状态压缩 + 状压DP

你说的曾经没有我的故事 提交于 2020-03-29 06:22:54

该博客有大量复制内容,仅供自己学习、复习使用。

部分参考于: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

 

-

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!