状压DP

[cqoi2012]局部极小值

首先我们想到一个 \(DP\)\(dp[i][S]\) 表示当前填了 \(1 \sim i\) 的数字 ,\(S\) 集合的局部最小值已被确定的方案数

但是这样我们随便填,则会是一些不能是局部最小值变成局部最小值,所以我们考虑容斥

我们发现对于一个矩阵,合法状态数不会太多,所以我们爆搜状态即可


[JSOI2009]密码

这种字符串匹配,我们可以往 \(AC\) 自动机的方面想,字符串种类很小,所以考虑状压

\(dp[i][j][S]\) 表示当前填了 \(i\) 的字符,在 \(AC\) 自动机的 \(j\) 号点上,已经有 \(S\) 集合的子串出现过的方案数


[NOI2015]寿司晚宴

我们从部分分考虑,在 \(n\ge20\) 的部分分中,发现质数的数量很少,所以我们状压即可

我们对于 \(n\ge500\) 发现超过最大质因数 \(\ge \sqrt n\)的一类数只能有一个人拿,所以这部分我们特殊考虑


[PKUSC2018]最大前缀和

我们分析一下何为最大前缀和,发现

对于前缀 $ [1 \dots i]$ 若它为最大前缀和,对于 \([1 \dots i]\) 的真后缀一定 $ \ge 0$

其后缀 $[ i+1 \dots n] $ 其前缀一定为 $ < 0$

我们对于这个结构做,分别设 \(f[S],g[S]\)\(S\) 集合内的数组成满足上面的前缀和后缀的方案数

最后统计答案即可


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

观察每一步的结构,发现所填的棋子,一定是从上到下数量不上升的,并且仅靠右

我们爆搜状态数,发现状态很少,所以直接暴力转移,将状态情况哈希

博弈论题目建议用 \(dfs\)


[联合省选 2021 A | B]滚榜

感觉状态很好设,主要说一下这里涉及到的 $trick $ \(-\) 贡献提前计算

题目要求我们封榜时过题数不降,但我们若再设一维空间就爆了

所以我们考虑在 \(i\) 加上 \(j\) 个过题数时,提前都给后面的人加上 \(j\) 道题,将贡献直接计算


[PKUWC2018]随机算法

首先有一个很显然的 \(dp\) , \(dp[s1][s2]\) 表示当前考虑了集合 \(s1\) 的数 ,当前独立集为 \(s2\) 的方案数

但是这样空间就爆炸了,考虑优化

我们发现独立集这一维是没法去掉的,充分发扬人类智慧

我们记在独立集是 \(S\) 的情况下,考虑可以加的数的集合为 \(L\) 我们发现对于不在 \(L\) 集合中的数

他都不会影响独立集,所以我们将这些数当成相同数,下一个取到 \(L\) 集合中的数,所成的概率就是 $\frac {1}{ 集合大小} $,所以直接转移到下一个更新独立集的状态

posted @ 2026-09-07 19:39  Maple_Mist  阅读(2)  评论(0)    收藏  举报