个人对 状压 的理解:将一个复杂的状态用一个 二进制数 来表示

位运算

位运算是状压里很重要的东西(可见算法进阶指南0x01)

包括了

与 & (二进制下 相同位 同为1 ,该位结果为 1,否则为0,101010 & 100110 = 100010)

或 | (二进制下 相同位 任意一个1 ,该位结果为 1,否则为0,101010 | 100110 = 101110)

非 ~ (二进制下 对每一个二进制位 取反操作 ~ 010010 = 101101,每个二进制数首位为符号位 0 为正,1为负,值得注意的是 ~ a = - a - 1;

异或 ^ (二进制下 相同位 不同 ,该位结果为 1,否则为0,101010 ^ 100110 = 001100)

左移 << (类似于 * 2 ^ K,即 N << K = N * 2 ^ K)

右移 >> (类似于 / 2 ^ K,即 N >> K = N / 2 ^ K)

下面是一些常用的位运算操作

专题01:状态压缩 安利题目:

Luogu P1562 还是N皇后

状压DP

我理解的状压DP就是将一个DP变量中的状态用二进制数压缩以便于存储 dp[state][][]……,state就是一个非负整数,可写成01串的形式,可表示为每个单位的取或者不取,通俗的来说,就是把一个只有0和1的数组或是字符串压缩成一个非负整数。(一般数具规模很小 状态数量为2 ^ N - 1,N一般在十几左右)

状态设计还是要看DP多加练习,推荐几道题目练练:

UVA10817 校长的烦恼 Headmaster’s Headache
P5911 [POI2004]PRZ
P2831 愤怒的小鸟
P5997 [PA2014]Pakowanie
P2704 [NOI2001]炮兵阵地
此部分状压DP经典题目很多就不再列举。

插头DP

//待更新

相关文章:

  • 2022-12-23
  • 2022-01-23
  • 2021-12-02
  • 2021-11-21
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-17
  • 2021-11-10
  • 2022-12-23
  • 2021-10-24
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案