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\),则
记忆化搜索即可。
矩阵优化
热知识:矩阵乘法的时候先枚举 \(k\) 常数更小。
对于线性递推式,如何构造答案矩阵和转移矩阵?先构造答案矩阵,横着构造,转移式每一项除以常数放进去,转移矩阵对着构造就可以了。
P1962:小清新例题,构造答案矩阵与转移矩阵即可
P5059:推式子找规律发现是斐波那契数列。
P3873:典型的线性递推式,直接用一开始说的方法推矩阵:
P5392:看到 \(x\) 很小而 \(L\) 很大,想到状压+矩阵快速幂。
先考虑一层,独立集要求每对相邻的不能同时选,\(2^x\) 枚举一下,记可行状态总数为 \(m\)。再考虑多层,设 \(f_{i,j}\) 为到第 \(i\) 层,其状态为可行状态 \(j\) 时的独立集总数,则有:
构造矩阵:
然而,因为一层可行的状态有 \(3000\) 多个,所以会超时。考虑将本质相同的状态合并(即旋转后相同),将 \(able\) 数组从能不能改为有多少个,于是减少到了 \(211\) 种,可以通过。
邻接矩阵的 \(k\) 次幂可以表示长度为 \(k\) 的有向路径数目。
P3758:原地停留就是自己连向自己,走到下一个就是普通连边,爆炸就是把所有点连到一个超级汇点,做完了。
P4159:考虑上面的性质,发现如果路径长度都为 \(1\) 的话直接矩阵快速幂即可。考虑处理路径长度,发现 \(c_{i,j}\) 最大为 \(9\),于是直接把每个点拆成 \(9\) 个,看着连就可以了。
P3193:套路地,令 \(f_{i,j}\) 表示大串匹配到第 \(i\) 位,小串匹配到第 \(j\) 位。因为下一位没有匹配上也可能因为有 border 所以转移到的 \(j\) 不为 \(0\),记失配后小串可以继续从 \(p\) 匹配,有:
记 \(g_{i,j}\) 为 当前小串匹配到 \(i\),有多少种方案让下一位匹配到 \(j\),用 kmp 求出,则原式可以转化为:
发现这个式子很像矩阵乘法,于是用矩阵快速幂加速。
杂题
CF2110D:联考考的,二分完拓扑排序一下做完了,不知道我为啥这么唐。有单调性多想想二分,好吗?好的。

浙公网安备 33010602011771号