题解 P4931 【情侣?给我烧了!(加强版)】

· · 题解

给出一个生成函数爆算递推式的方式:

不妨设 D_n 是这个问题的“错排”:每对情侣都不在一排的方案数。那么对于答案 f(n, k) 来说就可以用 D_n 进行表示,即考虑坐在一排的情侣是哪几对且他们在哪几排,即

f(n,k) = \binom nk^2 D_{n-k} k!2^k

这自然而然地导出了恒等式

\sum_{k=0}^n \binom nk^2 D_{n-k}k!2^k = (2n)!

其中 \binom nk^2 引导我们将生成函数写成

f(z) = \sum_{n=0}^\infty \frac{a_n}{n!^2} z^n

那么因为

\sum_{n=0}^\infty \frac{n!2^n}{n!^2} z^n = \mathrm{e}^{2z} \sum_{n=0}^\infty \frac{(2n)!}{n!^2}z^n = \frac1{\sqrt{1-4z}}

带入原始,我们得到了 D(z) 的生成函数方程

D(z) \cdot \mathrm e^{2z} = \frac1{\sqrt{1-4z}}

因此

D(z) = \frac{\mathrm e^{-2z}}{(1-4z)^{1/2}}

这帮助我们得到一个式子用于计算 D_n(其实就是容斥)

D_n = \sum_{k=0}^n \binom nk^2 (-2)^kk! (2n - 2k)!

或者也可以直接卷积,但是这都不够快速。我们考虑对 D(z) 进行求导。

D'(z) = \frac{8z\cdot \mathrm e^{-2z}}{(1-4z)^{3/2}} = \frac{8z}{1-4z} D(z)

这个微分方程可以帮助我们写出 D(z) 的递推形式了,即

D'(z) = 4zD'(z) + 8zD(z)

提取系数有

D_{n+1} = 4n(n+1)D_n + 8n^2(n+1)D_{n - 1}