「loj - 6703」小 Q 的序列

link。


https://codeforces.com/blog/entry/76447 里面抄一个代数做法。

考虑朴素 dp:记 \(f_{i, j} = f_{i - 1, j} + (j + a_i)\times f_{i - 1, j - 1}\),不太好做。

做变换 \(g_{i, j} = f_{i, i - j}\),并记 \(b_i = a_i + i\),则有 \(g_{i,j} = g_{i - 1, j - 1} + (b_i - j)\times g_{i - 1, j}\)

其对应的 OGF 满足 \(G_i = x(G_{i - 1} - G'_{i - 1}) + b_iG_{i - 1}\)

根据高中数学,我们可以构造 \(H_i = G_ie^{-x}\),则有 \(H_i = b_iH_{i-1} - xH'_{i-1}\)

注意算子 \(\vartheta = x\frac{d}{dx}\) 只和本位系数有关,也就是说有 \(h_{n, j} = h_{0, j}\times\prod_i(b_i - j) = \frac{(-1)^j}{j!}\times\prod_i(b_i - j)\)

之后可以分治 fft 算出 \(B(x) = \prod_i(b_i - x)\),然后多点求值求出 \(H_n\)


但是在本题中我们只需要算 \(\sum_i g_{n, i}\),是否有更好的方法?

我们知道:

\[\begin{aligned} g_{n,m} &= \sum_j \frac{(-1)^j}{j!}\times\prod_i(b_i - j)\times\frac{1}{(m-j)!} \\ &= \sum_p B_p\times\left(\sum_j \frac{(-1)^j}{j!}\times j^{n-p}\times\frac{1}{(m-j)!}\right) \\ \end{aligned} \]

其中 \(B_p = [x^p]\prod_i(b_i - x)\),一样分治 fft 算出。

考虑将 \(j^{n - p}\) 展开成下降幂形式:

\[\begin{aligned} & \sum_j \frac{(-1)^j}{j!}\times j^{n-p}\times\frac{1}{(m-j)!} \\ =& \sum_{k}{n - p\brace k}\times\left(\sum_j \frac{(-1)^j}{j!}\times\binom{j}{k}\times k!\times\frac{1}{(m-j)!}\right) \\ =& \sum_{k}{n - p\brace k}\times\left(\frac{\sum_j\binom{m-k}{j-k }(-1)^j}{(m-k)!}\right) \\ =& (-1)^m{n - p\brace m} \end{aligned} \]

\(\sum_i g_{n, i} = \sum_p B_p \times \left(\sum_i(-1)^i{n - p\brace i}\right)\)。接下来只需要计算 \(s_{n-p} = \sum_i(-1)^i{n - p\brace i}\)

继续用代数做法。设出 EGF:\(S(x) = \sum\frac{s_i}{i!}x^i\)。代入:

\[\begin{aligned} S(x) =& \sum_{i}\frac{\sum_m(-1)^m{i\brace m}}{i!}x^i \\ =& \sum_m(-1)^m\left(\sum_{i}\frac{{i\brace m}}{i!}x^i\right) \\ =& \sum_m(-1)^m\frac{(e^x-1)^m}{m!} \\ =& \exp(1-e^x)\\ \end{aligned} \]

做个多项式 exp 即可求出。这真的更优秀吗。

posted @ 2021-03-31 11:26  Tiw_Air_OAO  阅读(266)  评论(0编辑  收藏  举报