Binomial Sum 学习记录

binomial Sum 可以用来求 \(\sum_{i=0}^{n}[x^i]f(x)g^{i}(x)\)\(f(g(x))\) 的某些项数的线性组合 , 一般是求 \([x^k]\sum_{i=0}^{n}[x^i]f(x)g^{i}(x)\) , 复杂度为 \(O(k)\)

具体流程如下:

  1. \(c = [x^0]g(x)\)

  2. \(F(x + c) = f(x+c) \pmod {x ^ {n+1}}\) , 这里设 \(F(x+c) = f(x+c)\) 是为了后面代入 \(g(x) - c\) , 代入 \(g(x) - c\) 是因为 \(g(x) - c\) 常数项为零, 这样可以使高次项对答案没有贡献. 即 \((g(x)-c)^i [i > k]\) 对答案不会产生贡献。(多项式的常数项为 \(0\) 在很多情况下也需要被注意)。

  3. 然后可以寻找 \(F(x)\) 的递推式,可以通过求导或实际意义。

  4. 然后就转化为了求 \([x^k]F(g(x)) = [x^k]\sum_{i=0}^{k}[x^i]F(x)g^i(x)\)

例题1 CF932E

\[\begin{aligned} \sum_{i=0}^{n}\binom{n}{i}i^k \end{aligned} \]

\(\binom{n}{i}\) 可以看作 \([x^i](1+x)^n\) , \(i^k\) 可以看作 \([\frac{x^k}{k!}]e^{ix}\) . 那么就是要求 \([\frac{x^k}{k!}]\sum_{i=0}^{n}[x^i](1+x)^ne^{ix} = [\frac{x^k}{k!}](1+e^x)^n\)

那么 \([x^0]e^x = 1\). 所以设 \(F(x + 1) = (x + 1 + 1)^n = (x+2)^n \pmod{x^{k+1}}\) , 考虑递推求 \(F(x + 1)\) 。设 \(f(x + 1) = (x+2)^n\)

\[\begin{aligned} f’(x + 1) &= n(x+2)^{n-1}\\ (x+2)f'(x+1) &= n(x + 2)^n\\ (x+2)f'(x+1) &= nf(x+1)\\ (x+2)f'(x+1) - nf(x+1)&= 0\\ \end{aligned} \]

那么对 于 \(F(x + 1)\) , 这样会少考虑 \([x^{k}][2f'(x + 1)]x^k\) 的贡献. 所以

\[(x+2)F'(x+1) - nF(x+1) = -[x^{k}][2f'(x+1)]x^k\\ \]

然后把多项式平移一下

\[\begin{aligned} &(x+1)F'(x) - nF(x)\\ =&-[x^{k}][2 f'(x+1)](x-1)^k \\ =& -n\binom{n-1}{k}2^{n-k}(x-1)^k \\ =& \sum_{i=0}^{k}(-1)^{k-i+1}\binom{k}{i}n\binom{n-1}{k}2^{n-k}x^i \\ \end{aligned} \]

提取系数得到

\[F[i] = \frac{(-1)^{k-i}n\binom{k}{i-1}\binom{n-1}{k}2^{n-k} + (n-i+1)F[i-1]}{i} \]

然后发现不知道 \(F[0]\) ,试着求一下

\[\begin{aligned} &[x^0]F(x)\\ =&[x^0]F(x - 1 + 1)\\ =&[x^0]\sum_{i=0}^{k}[x^i]F(x+1)(x-1)^i\\ =&[x^0]\sum_{i=0}^{k}[x^i](x+2)^n(x-1)^i\\ =&[x^0]\sum_{i=0}^{k}\binom{n}{i}2^{n-i}(x-1)^i\\ =&\sum_{i=0}^{k}\binom{n}{i}2^{n-i}(-1)^i\\ \end{aligned} \]

这样就得到了 \(F(x)\) .

而我们要求的是 \([\frac{x^k}{k!}]F(e^x) = [\frac{x^k}{k!}]\sum_{i=0}^{k}[x^i]F(x)e^{ix} = \sum_{i=0}^{k}i^k[x^i]F(x)\)

这样就可以 \(O(k+\log n)\) 解决这道题了

posted @ 2022-06-01 20:21  youwike  阅读(214)  评论(0编辑  收藏  举报