d砰砰砰砰砰砰

updating...

前面标 * 的是还没写的嘻嘻嘻


题单:

  • dp 好题 这个题单的题目都很好啊

状压 dp

CF53E\(f_{i,j}\) 前一维表示现在连通的点,后一维表示叶子节点。每一次转移从 \(i\) 中取出 \(u\) ,从 \(i\) 的补集中取出 \(v\) ,连一条边(注意,如果 \(u\)\(j\) 内,要记得删去)。考虑如何去重,发现对于同一颗树,会统计 叶子节点个数 次,于是最后计算答案时除以 popcount(j) 即可。

tips:还有其他去重方法,后面可以学一下。也可以通过控制枚举顺序去重,或是容斥+矩阵树定理。


*CF8C:考虑 \(f_i\) 表示收入手提包的物品状态为 \(i\) 时的最小时间,枚举这次拿的是哪两个(如果两个相同就是拿了一个),再用一个数组记录一下是从哪里转移过来的以输出方案。发现取法如果只有次取的顺序不同本质上就是重复的,可以固定一个,只枚举另一个,于是时间复杂度为 \(O(2^n \times n)\),可以通过。


CF1773G:要从概率的角度考虑的问题。\(f_{i}\) 表示场上剩下的人的状态为 \(i\) 时的概率。


P3226:联考考到的题,其实更应该放在构造里面。从 \(1\) 开始构造一个矩阵(其实是三角形来的),往右一个 \(\times 3\),往下一个 \(\times 2\),对于没有在之前的矩阵出现过的数构造新的矩阵并标记。状压一下,对于一个矩阵内,求不取相邻的数的总数(类似于玉米田),把每个矩阵的总数相乘即可。


ボール\(x_i \leq 15\),考虑状压。若在投球后物品状态没有改变,则会给 \(E_s\) 贡献 $E_s \times \frac{1}{3} $ ,否则设状态改变为 \(s2\),则会贡献 $E_{s2} \times \frac{2}{3} $。考虑由 \(s\) 转移到 \(s_2\),钦定要打的位置,设可能打到的三个位置中为 \(1\) 的位置个数为 \(cnt\),则

\[ E_s = \min_{}{1+ \frac{1}{3} \sum{}{E_{s_2}} + \frac{cnt}{3} E_s } \\ \]

\[\Rightarrow E_s = \frac{1+ \frac{1}{3} \sum{}{E_{s_2}} }{1-cnt} \]

记忆化搜索即可。


矩阵优化

热知识:矩阵乘法的时候先枚举 \(k\) 常数更小


对于线性递推式,如何构造答案矩阵和转移矩阵?先构造答案矩阵,横着构造,转移式每一项除以常数放进去,转移矩阵对着构造就可以了。


P1962:小清新例题,构造答案矩阵与转移矩阵即可


P5059:推式子找规律发现是斐波那契数列。


P3873:典型的线性递推式,直接用一开始说的方法推矩阵:

\[Ans = \begin{bmatrix} w_{i} & w_{i-1} & \cdots & w{i-n+1} \end{bmatrix} \]

\[T = \begin{bmatrix} a_{1} & 1 & 0 & \cdots & 0\\ a_{2} & 0 & 1 & \cdots & 0\\ &&\cdots \\ a_{n} & 0 & 0 & \cdots &1 \end{bmatrix} \]


P5392:看到 \(x\) 很小而 \(L\) 很大,想到状压+矩阵快速幂。

先考虑一层,独立集要求每对相邻的不能同时选,\(2^x\) 枚举一下,记可行状态总数为 \(m\)。再考虑多层,设 \(f_{i,j}\) 为到第 \(i\) 层,其状态为可行状态 \(j\) 时的独立集总数,则有:

\[f_{i,j} = \sum_{ staj \& stak }{f_{i-1,k}} \]

构造矩阵:

\[\begin{bmatrix} f_{i,1} & f_{i,2} & \cdots & f_{i,m} \end{bmatrix} \cdot \begin{bmatrix} able(1,1) & able(2,1) & \cdots & able(m,1) \\ able(1,2) & able(2,2) & \cdots & able(m,2) \\ && \cdots \\ able(1,m) & able(2,m) & \cdots & able(m,m) \end{bmatrix} \]

然而,因为一层可行的状态有 \(3000\) 多个,所以会超时。考虑将本质相同的状态合并(即旋转后相同),将 \(able\) 数组从能不能改为有多少个,于是减少到了 \(211\) 种,可以通过。


邻接矩阵的 \(k\) 次幂可以表示长度为 \(k\) 的有向路径数目。


P3758:原地停留就是自己连向自己,走到下一个就是普通连边,爆炸就是把所有点连到一个超级汇点,做完了。


P4159:考虑上面的性质,发现如果路径长度都为 \(1\) 的话直接矩阵快速幂即可。考虑处理路径长度,发现 \(c_{i,j}\) 最大为 \(9\),于是直接把每个点拆成 \(9\),看着连就可以了。


P3193:套路地,令 \(f_{i,j}\) 表示大串匹配到第 \(i\) 位,小串匹配到第 \(j\) 位。因为下一位没有匹配上也可能因为有 border 所以转移到的 \(j\) 不为 \(0\),记失配后小串可以继续从 \(p\) 匹配,有:

\[f_{i,j} = \sum_{k=0}^{9}{f_{i-1,p}} \]

\(g_{i,j}\) 为 当前小串匹配到 \(i\),有多少种方案让下一位匹配到 \(j\),用 kmp 求出,则原式可以转化为:

\[f_{i,j} = \sum_{k=0}^{m-1}{f_{i-1,k} \times g_{k,j} } \]

发现这个式子很像矩阵乘法,于是用矩阵快速幂加速。


杂题

CF2110D:联考考的,二分完拓扑排序一下做完了,不知道我为啥这么唐。有单调性多想想二分,好吗?好的。

posted @ 2025-10-04 16:33  卢浮宫  阅读(0)  评论(0)    收藏  举报