APIO2023 讲课落实

字符串

咕咕咕

字符串

咕咕咕

母函数和动态规划相关运用

\(\text{CF755G}\)

洛谷云剪贴板界面

考虑设计一个动态规划。

\(f_{i,j}\) 表示考虑完了前 \(i\) 个球,目前分了 \(j\) 组的方案数。

有转移如下。

\[f_{i,j}=f_{i-1,j}+f_{i-1,j-1}+f_{i-2,j-1} \]

\(F_i(x)=\sum_{p=0}^{\inf} f_{i,p} \cdot x^p\)

那么有如下式子。

\[F_i(x)=F_{i-1}(x) \cdot (x+1)+F_{i-2}(x)\cdot x \]

我们再来考虑一点东西。

考虑倍增,有转移式子如下。

\[f_{2i,j}=\sum_{p=0}^j f_{i,p}\cdot f_{i,j-p}+\sum_{p=0}^{j-1}f_{i-1,p}\cdot f_{i-1,j-p-1} \]

那么有如下式子。

\[F_{2i}(x)=F_i^2(x)+F_{i-1}^2(x) \cdot x\\ F_{2i-1}(x)=F_i(x) F_{i-1}(x)+F_{i-1}(x)F_{i-2}(x) \cdot x\\ F_{2i-2}(x)=F_{i-1}^2(x)+F_{i-2}^2(x) \cdot x \]

由此,我们可以发现,我们只需要在倍增的时候维护 \(F_{2i}(x),F_{2i-1}(x),F_{2i-2}(x)\) 即可。

那么我们现在相当于初始有一个数字 \(1\),然后我们需要支持 \(+1\) 和 $ \times 2$,不难发现上述两个式子分别可以做到。

这意味着我们可以在 \(O(\log n)\) 次 NTT 就可以得到 \(F_n(x)\)

时间复杂度为 \(O(k \log k \log n)\)

\(\text{CF1821F}\)

洛谷云剪贴板界面

考虑设计动态规划转移方程。

\(f_{i,j}\) 表示在最后一个合法位置在 \(i\) 时,已经用了 \(j\) 棵树的方案。

有转移如下。

\[f_{i,j}=\sum_{x=0}^{i-2k-1} f_{x,j-1} + 2\sum_{x=i-2k}^{i-k-1} f_{x,j-1} \]

有边界 \(f_{0,0}=1\),由此已经可以得到一个 \(O(nk)\) 的解法了,但是不够优秀,考虑怎么优化这个算法。

不妨设 \(F_i(x)=\sum _{p=0}^{\inf} f_{p,i} \cdot x^p\)

将上面的转移式子写成多项式的形式。

\[F_j(x)=F_{j-1}(x)\cdot \sum_{i=2k+1}^n x^i + 2F_{j-1}(x)+\sum_{i=k+1}^{2k} x^i\\ F_j(x)=F_{j-1}(x) \left( \sum_{i=2k+1}^n x^i + 2\sum _{i=k+1}^{2k} x^i\right) \]

不妨设 \(G(x)=\sum_{i=2k+1}^n x^i + 2\sum _{i=k+1}^{2k} x^i\),则 \(F_j(x)=F_{j-1}(x)G(x)\)

据此,我们可以得到一个 \(O(n \log n/n \log^2 n)\) 的多项式快速幂做法,但是实际上仍然可以优化。

我们对于 \(G(x)\) 稍作修改,\(G(x)=\sum_{i=2k+1}^{\color{red}\inf} x^i + 2\sum _{i=k+1}^{2k} x^i\),显然这样不影响答案。

写出 \(G\) 的生成函数。

\[G(x)=\dfrac{x^{2k+1}}{1-x}+\dfrac{2x^{k+1}-2x^{2k+1}}{1-x} \\ =\dfrac{2x^{k+1}-x^{2k+1}}{1-x} \\ =x^{k+1}\dfrac{2-x^k}{1-x} \]

考虑答案就是 \(\sum _{i=0}^n f_{i,m}\),考虑 \(f_{n,m}\) 怎么求解。

那么就是 \([x^n]G^m(x)=[x^n]\left(x^{k+1}\dfrac{2-x^k}{1-x}\right)^m\)

\[[x^n]\left(x^{k+1}\dfrac{2-x^k}{1-x}\right)^m\\ =[x^{n-m(k+1)}] \left( \dfrac{2-x^k}{1-x}\right)^m\\ =[x^{n-m(k+1)}] (2-x^k)^m (1-x)^{-m} \]

对于两个多项式相乘,求某一项系数可以做到线性。

至于求解 \(\sum _{i=0}^n f_{i,m}\),只要推一下就发现还是一个式子可以解决的。

至此,本题在 \(O(n)\) 的时间复杂度内解决。

咕咕咕

杂题选讲

咕咕咕

杂题选讲

咕咕咕

posted @ 2023-05-23 12:01  OccDreamer  阅读(80)  评论(0)    收藏  举报