APIO2023 讲课落实
字符串
咕咕咕
字符串
咕咕咕
母函数和动态规划相关运用
\(\text{CF755G}\)
考虑设计一个动态规划。
设 \(f_{i,j}\) 表示考虑完了前 \(i\) 个球,目前分了 \(j\) 组的方案数。
有转移如下。
设 \(F_i(x)=\sum_{p=0}^{\inf} f_{i,p} \cdot x^p\)。
那么有如下式子。
我们再来考虑一点东西。
考虑倍增,有转移式子如下。
那么有如下式子。
由此,我们可以发现,我们只需要在倍增的时候维护 \(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_{0,0}=1\),由此已经可以得到一个 \(O(nk)\) 的解法了,但是不够优秀,考虑怎么优化这个算法。
不妨设 \(F_i(x)=\sum _{p=0}^{\inf} f_{p,i} \cdot x^p\)。
将上面的转移式子写成多项式的形式。
不妨设 \(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\) 的生成函数。
考虑答案就是 \(\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\)。
对于两个多项式相乘,求某一项系数可以做到线性。
至于求解 \(\sum _{i=0}^n f_{i,m}\),只要推一下就发现还是一个式子可以解决的。
至此,本题在 \(O(n)\) 的时间复杂度内解决。
咕咕咕
杂题选讲
咕咕咕
杂题选讲
咕咕咕

浙公网安备 33010602011771号