专题练习——状压DP

P3694 邦邦的大合唱站队

解析

设 \(f_s\) 为将 \(s\) 中的乐队排列好的变化人数,那么对于一个固定的 \(s\),它占的位置应该是固定的,我们记为 \(len=\sum_{t\in s} cnt_t\),然后我们设 \(a_{i,j}\) 为 \(j\) 的前缀和,那么有 \(f_s=max_{t\in s} f_{s-t}+cnt_t-a_{len,t}+a_{len-cnt_t,t}\),也就是枚举最后一个放的乐队

启发/反思

一直在想按位置来转移,但是实际上位置是不必要的,因为

  1. 我们只需要起始和结尾的位置,一位位枚举会有浪费
  2. 对于一个固定的状态 \(s\),它的起始结尾位置的固定的,因此只需要转移状态,不需要转移结束的位置

P2157 [SDOI2009] 学校食堂

思路

显然状压是维护第 \(i\) 位后7个的选取状态,但问题在于第 \(i\) 位前的状态不确定

于是我们可以令前面已将全部吃上,发现这样转移肯定是不漏的

那么方程的设计的显然了,令 \(f_{i,s,j}\) 为第 \(i\) 位,前面已经处理,后7位的状态为 \(s\),上一次的位置为 \(j\),由因为显然上一次与这一次的位置不可能大于7,因此我们维护 \(i-j\),这一维的空间就压了下来

考虑转移

\(\begin{cases} f_{i+1,s>>1,j-1}=f_{i,s,j} \\ f_{i,s+t,t}=f_{i,s,j}+val(i+j,i+t) \end{cases}\),其中 \(t\) 要保证满足 \(i\sim i+t\) 的要求

启发/反思

  1. 状态设计:满足转移不漏
  2. 压缩空间:作差

P2396 yyy loves Maths VII

解析

正常方法,但是卡常,需要用lowbit来转移

启发/反思

lowbit转移多一个 \(1\over 2\) 的常数因子,卡常时可用

P4363 [九省联考 2018] 一双木棋 chess

解析

显然中间时的选取情况是这样的

image.png

那么我们就可以用轮廓线dp,具体地说:我们将向左记为1,向右记为0,那么我们就可以用二进制数来表示这条分割线,进而描绘整个状态

转移是简单的,记忆化搜索即可

启发

轮廓线dp:不能有凹槽

posted @ 2026-10-30 14:54  Rainesxiao  阅读(2)  评论(0)    收藏  举报