对于“状态压缩动态规划”中的状态,通常与集合相关联。集合本身具有三个性质:确定性,互异性和无序性 。这也就决定了只关心每个元素的存在状态,而这通常可以使用 0 或者 1 表示存在 或者不存在。例如,一顿饭有 8 道菜,小明同学最终吃了某几道菜,必然是这 8 道菜的子集。令 1 表示吃了, 0 表示没吃,那么以下几个状态:10000001 表示只吃了 1 号菜和 8 号菜; 01010101 表示吃了 2 , 4 , 6 , 8 四道菜。
由此可见,可以通过一串 01 码来清晰地表示一个集合的状态。同时,在确定了最低位的前 提下,一串 0-1 码与一个二进制数一一对应。这种表示状态的方式被称为状态压缩,简称状压。所谓“压缩”,即是用一个二进制数来保存一组状态,将一个集合的状态压缩进了一个二进制数中,而通常这个二进制数在十进制下的大小可以作为其编号。状态压缩本质上是进行了两步操作:
题目编号 | 题目 | 分类 | 正确 | 提交 | |
---|---|---|---|---|---|
A | 砝码称重 | 状态压缩DP | 14 | 27 | |
B | 关灯问题II | 状态压缩DP | 10 | 13 | |
C | 互不侵犯 | 状态压缩DP | 14 | 30 | |
D | [NOI2001] 炮兵阵地 | 状态压缩DP | 13 | 48 | |
E | Corn Fields G | 状态压缩DP | 16 | 41 | |
F | 邦邦的大合唱站队 | 状态压缩DP | 11 | 28 | |
G | [NOIP2016 提高组] 愤怒的小鸟 | 搜索 状态压缩DP | 11 | 36 | |
H | [NOIP2017 提高组] 宝藏 | 状态压缩DP,搜索 | 1 | 2 |