2024.2.16 そんな凡庸を探して、探している

Namid[A]me 好听呢。可惜了。
今天 DP 专题感觉 laofu 选的题有点经典,导致我有一半时间在摸鱼,不过还是写了点题的。
怎么西工大附中有糖醋茄子这种神秘菜啊。

ICPC 2020 Macau B Boring Problem

其实不一定懂完了,试着说一说。
显然询问没什么用,问题本质是要求解一个 AC 自动机上游走问题。
直接高斯消元显然寄飞了,考虑优化。
考虑原本的高斯消元是什么样的,是:\(f_u=\sum_{i=1}^k p_i f_{tr(u,k)}+1\)
考虑主元法,发现这样一件事:如果在原 Trie 上某个节点只有一个儿子,这个点在 AC 自动机上的其余转移全部会指向向上的节点,于是可以用父亲的方程推出儿子用主元表示的结果。
于是令根节点与儿子个数大于二的节点的儿子们作为主元,这样就只有 \(O(n)\) 个主元,可以使用 BFS 推出所有元用主元表示的结果,以结束点答案为 \(0\) 和「儿子个数大于二的节点」存在两种表示:「用儿子们」「从父亲推」来构造方程,于是就做到 \(O(n^3)\)Code
昨天模拟赛 T3 就这个东西加后半的普及组答辩,不写了。

IOI2005 River

\(f_{u,j,k}\) 表示对于点 \(u\) 钦定祖先 \(j\) 作为最近的伐木场,子树内选了 \(k\) 个伐木场,\(g_{u,j,k}\) 同上,但是 \(u\) 是一个伐木场,同时这个也没算进 \(k\) 里面。
于是暴力 DP 复杂度就是 \(O(n^2k^2)\),对了,Code

TC12909 Seat Friends

\(f_{i,j}\) 表示当前 \(i\) 个人 \(j\) 段,于是可以列出转移柿子:

\[\begin{aligned} 2jf_{i,j}&\to f_{i+1,j}\\ jf_{i,j}&\to f_{i+1,j-1}\\ jf_{i,j}&\to f_{i+1,j+1} \end{aligned} \]

最后计算答案需要上一个组合数,还得记得考虑圆是可以转圈的,\(O(n^2)\)Code

CS Academy Round #32 Sum of Powers

需要知道 \(f_{i,j}\)\(i\) 个数凑出 \(j\) 这样的 DP。
于是就会发现求 \(f_{i-k,j-k*l}k^m\) 的总和就是答案了,证明很好证。
https://csacademy.com/submission/4728499

NOIOL #1 跑步

\(f_{i,j}\) 表上面的 DP,\(g_{i,j}\) 表用 \([1,i]\) 背出 \(j\) 的总方案,都是容易 \(O(n^2)\) 做到的。
根号分治,对于 \(<\sqrt{n}\) 的跑 \(g\),对于 \(>\sqrt{n}\) 的跑 \(f\),复杂度都是 \(O(n\sqrt{n})\) 的。
于是就平衡住了,Code

posted @ 2024-02-16 21:26  cnyz  阅读(20)  评论(0编辑  收藏  举报