组合数学基础

用红色标出来的是需要特别注意的地方。

计数原理

乘法原理

\(n\) 元组 \((a_1,a_2,\cdots,a_n)\) 中,\(a_1\)\(x_1\) 种取值,\(a_2\)\(x_2\) 种取值,\(\cdots\)\(a_n\)\(x_n\) 种取值,则一共有 \(\prod_{i=1}^n a_i\) 种不同的 \(n\) 元组。

加法原理

设集合 \(A\)划分\(n\) 个集合 \(S_1,S_2,\cdots,S_n\)(这些集合两两交集为空,并集为 \(A\))。则 \(|A|=\sum_{i=1}^n |S_i|\)

除此之外,还有减法原理和除法原理,可以看做是上述定理的逆用。

排列与组合

我们考虑 \(n\) 个不同物品一共有多少种排列。

P5505 [JSOI2011] 分特产

给定 \(m\) 种不同的物品,第 \(i\) 种物品有 \(a_i\) 个,同种物品是相同的。求出将这些物品分成 \(n\) 组(不能为空)的方案数。

正难则反。考虑反过来做。

不妨对每种物品分开考虑,于是总方案数为

\[\prod_{i=1}^m {a_i+n-1\choose n-1} \]

对于不合法的情况,枚举空盒子数量。假设有 \(k\) 个盒子为空,我们有

\[g(k)={n\choose k}\prod_{i=1}^{m} {a_i+n-k-1\choose n-k-1} \]

于是答案为

\[\sum_{k=0}^{n-1} (-1)^k g(k) \]

P7386 「EZEC-6」0-1 Trie

构造一个 \(\texttt{01}\) 串,满足以下条件:

  • \(n\)\(\texttt{1}\)\(m\)\(\texttt{0}\)
  • 第一个字符是 \(\texttt{0}\),最后一个字符是 \(\texttt{1}\)
  • 所有的 \(\texttt{1}\) 都不相邻。

将符合条件的串放到一个 01-Trie 上,求节点数。

在本题中,01-Trie 无根,且认为字符存储在节点上。

\(T\leq 2\times 10^6\)\(n,m\leq 5\times 10^{18}\)

P3214 [HNOI2011] 卡农

P5303 [\(\textcolor{red}{\textsf{GXOI}}\)/GZOI2019] 逼死强迫症

二项式反演

  • 形式 1

\(f(n)\) 表示恰好\(n\) 个有标号元素形成特定结构的方案数,\(g(n)\) 表示用至多 \(n\)有标号元素形成特定结构的总方案数。

利用 \(f\) 来表达 \(g\) 是 trivial 的。

\[g(n)=\sum_{i=0}^n {n\choose i}f(i) \]

反过来,我们有

\[f(n)=\sum_{i=0}^n{n\choose i}(-1)^{n-i}g(i) \]

这就是二项式反演的第一形式:“至多-恰好”。

同理,我们有

  • 形式 2

\(f(n)\) 表示恰好\(n\) 个有标号元素形成特定结构的方案数,\(g(n)\) 表示用至少 \(n\)有标号元素形成特定结构的总方案数。

我们有

\[g(i)=\sum_{k=i}^n {n\choose k} f(k)\iff f(i)=\sum_{k=i}^n {n\choose k}(-1)^{i-k}g(k) \]

HDU 1465

求长度为 \(n\) 的错排的方案数,\(1\leq n\leq 20\)

考虑“至多-恰好”的形式,设 \(g(i)\) 为至多有 \(i\) 个位置错位的方案数,显然 \(g(i)=i!\)(任意打乱都符合)。

于是我们有

\[f(n)=\sum_{i=0}^n {n\choose i}(-1)^{n-i}i! \]

高维二项式反演

我们以 CF997C Sky Full of Stars 为例。

CF997C Sky Full of Stars

用红色,绿色,蓝色三种颜色染一个 \(n \times n\) 的正方形网格,求有多少种染色方案使得至少一行或一列是同一种颜色。结果对 \(998,244,353\) 取模。

\(n\leq 10^6\)

\(f(i,j)\) 为恰好有 \(i\)\(j\) 列颜色相同的方案数,\(g(i,j)\) 为至少有 \(i\)\(j\) 列颜色相同的方案数。

我们有

\[f(x,y)=\sum_{i=x}^n{i\choose x}(-1)^{i-x}\sum_{j=y}^n (-1)^{j-y} {j\choose y} g(i,j) \]

稍微化得好看一点。

\[f(x,y)=\sum_{i=x}^n\sum_{j=y}^n {i\choose x}{j\choose y}(-1)^{i-x}(-1)^{j-y} g(i,j) \]

答案显然为 \(3^{n^2}-f(0,0)\)。考虑计算 \(g\)

\[g(i,j)=\begin{cases} \displaystyle 3^{n^2}, & i=j=0 \\ \displaystyle {n\choose i}\cdot 3^i\cdot 3^{n^2-ni}, & i\neq 0,j=0 \\ \displaystyle {n\choose j}\cdot 3^j\cdot 3^{n^2-nj}, & i=0,j\neq 0 \\ \displaystyle {n\choose i}{n\choose j}3\cdot 3^{(n-i)(n-j)} & i,j\neq 0 \end{cases} \]

我们拆一下式子。

\[\begin{aligned} f(0,0)&=\sum_{i=0}^n\sum_{j=0}^n (-1)^{i+j} g(i,j) \\ &=\sum_{i=1}^n\sum_{j=1}^n (-1)^{i+j} g(i,j)-2\sum_{i=1}^n g(0,i)+g(0,0) \end{aligned} \]

注意到二重求和严重拖累的复杂度,于是我们要简化它。

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^n (-1)^{i+j}3\cdot 3^{(n-i)(n-j)}&=\sum_{i=1}^n\sum_{j=1}^n{n\choose i}{n\choose j}(-1)^{i+j}3\cdot 3^{n^2}\cdot 3^{-ni}\cdot 3^{-nj}\cdot 3^{ij} \\ &=\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{n^2+1-ni}\sum_{j=1}^n{n\choose j}(-1)^j\cdot 3^{-nj} \cdot 3^{ij} \\ &=\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{n^2+1-ni}\sum_{j=1}^n{n\choose j}(-1)^j\cdot 3^{(i-n)j} \\ &=3^{n^2+1}\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{-ni}\left[(1-3^{i-n})^{n}-1\right] \end{aligned} \]

于是我们在 \(\Theta(n\log n)\) 的时间复杂度内解决了本题。

差分与下降幂

定义差分算子

\[\Delta f=f(x+1)-f(x) \]

定义 \(\mathbf{E}f=f(x+1)\)

Thus

  • \(\Delta (u\pm v)=\Delta u\pm \Delta v\).

  • \(\Delta Cu=C\Delta u\) where \(C\) is a constant.

  • \(\Delta uv=\textcolor{red}{u\Delta v+\mathbf{E}v\Delta u}。\)\(m\ge 0\)

定义 \(x\)\(m\) 次下降幂

\[x^{\underline{m}}=x(x-1)\cdots (x-m+1) \]

\(m\) 次上升幂

\[x^{\overline{m}}=x(x+1)\cdots (x+m-1) \]

(特别地,\(x^{\underline{0}}=x^{\overline{0}}=1\)

注意到 \(n!=n^{\underline{n}}=1^{\overline{n}}\)

那么对于指数为负的情况捏?

对于下降幂,我们注意到

\[x^{\underline{m}}=(x-m+1)x^{\underline{m-1}} \]

于是

\(x^{\underline{0}}=(x+1)x^{\underline{-1}}\)

\(x^{\underline{-1}}=(x+2)x^{\underline{-2}}\)

不难推出

\(\displaystyle x^{\underline{-1}}=\frac{1}{x+1}, x^{\underline{-2}}=\frac{1}{(x+1)(x+2)}\)

于是我们可以扩充下降幂的定义

\[x^{\underline{m}}=\begin{cases} x(x-1)\cdots(x-m+1), & m\gt 0 \\ 1, & m=0 \\ \displaystyle\frac{1}{(x+1)(x+2)\cdots(x+(-m))} & m\lt 0 \end{cases} \]

注意到

\[x^{\underline{-m}}=\frac{1}{(x+m)^{\underline{m}}} \]

对于下降幂,我们有很好的性质

\[\Delta x^{\underline{n}}=nx^{\underline{n-1}} \]

证明:

\[\begin{aligned} \Delta x^{\underline{n}}&=(x+1)x(x-1)\cdots (x-n+2)-x(x-1)\cdots(x-n+1) \\ &=[x+1-(x-n+1)]x(x-1)\cdots (x-n+2) \\ &=nx^{\underline{n-1}} \end{aligned} \]

证毕。


定和式与不定和式

我们定义定和式

\[{\sum}_{a}^{b} f(x)\delta x=\sum_{i=a}^{\textcolor{red}{b-1}} f(i) \]

类比无限微积分中的

\[\int_a^b \mathrm{d}f(x)=f(b)-f(a) \]

于是我们有

\[{\sum}_{a}^{b} \Delta f(x)\delta x=f(b)-f(a) \]

类似的,可以定义不定和式。具体地,若 \(f=\Delta F\),则 \(\sum f=F+C\)(其中 \(C\) 为常量)

我们立刻可以得到

  • \(\displaystyle {\sum}_a^a f(x)\delta x=0\)

  • \(\displaystyle {\sum}_a^b f(x)\delta x=-{\sum}_b^a f(x)\delta x\)

  • \(\displaystyle {\sum}_a^b f(x)\delta x+{\sum}_b^c f(x)\delta x={\sum}_a^c f(x)\delta x\)

  • \(\displaystyle {\sum}_a^b (f(x)+g(x))\delta x={\sum}_a^b f(x)\delta x+{\sum}_a^b g(x)\delta x\)

  • \(\displaystyle {\sum}_a^b Cf(x)\delta x=C{\sum}_a^b f(x)\delta x\)

例 1

求出

\[\sum_{i=0}^{n-1} a^i \quad (a\neq 1) \]

我们有 \(\Delta a^x=a^{x+1}-a^x=(a-1)a^x\)

于是 \(\displaystyle a^x=\Delta\left(\frac{a^x}{a-1}\right)\)

代入可以得到

\[\sum_{i=0}^{n-1} a^i={\sum}_{0}^n \Delta\left(\frac{a^x}{a-1}\right)\delta x=\frac{a^n-1}{a-1} \]

例 2

计算

\[\sum_{i=1}^{n} i^2 \]

注意到 \(x^2=x^{\underline{2}}+x^{\underline{1}}\),而且 \(x^{\underline{2}}=\Delta \frac{1}{3}x^{\underline{3}},x^{\underline{1}}=\Delta \frac{1}{2}x^{\underline{2}}\)

于是

\[\begin{aligned} \sum_{i=1}^{n} i^2&=\sum_{i=0}^{n} (i^{\underline{2}}+i^{\underline{1}})\\ &={\sum}_{0}^{n+1} (\Delta \frac{1}{3}x^{\underline{3}}+\Delta \frac{1}{2}x^{\underline{2}}) \\ &=\left[\frac{1}{3}x^{\underline{3}}+\frac{1}{2}x^{\underline{2}}\right]\bigg|_{0}^{n+1}\\ &=\frac{1}{3}(n+1)(n)(n-1)+\frac{1}{2}n(n+1)\\ &=\frac{1}{6}n(n+1)(2n+1) \end{aligned} \]

P1625 求和

求出

\[\sum_{i=1}^n \frac{1}{\prod_{j=i}^{i+m-1}j} \]

其中 \(n+m\leq 500,n\gt 0,m\gt 1\)

\[\begin{aligned} \sum_{i=1}^n \frac{1}{\prod_{j=i}^{i+m-1}j}&= \sum_{i=0}^{n-1} \frac{1}{\prod_{j=i+1}^{i+m}j} \\ &=\sum_{i=0}^{n-1} \frac{1}{(i+m)(i+m-1)\cdots (i+1)} \\ &=\sum_{i=0}^{n-1} i^{\underline{-m}} \\ &={\sum}_0^n \Delta\left(\frac{x^{\underline{1-m}}}{1-m}\right)\delta x \\ &=\frac{n^{\underline{1-m}}-0^{\underline{1-m}}}{1-m} \\ &=\frac{\frac{1}{(m-1)(m-2)\cdots 1}-\frac{1}{(n+1)(n+2)\cdots (n+m-1)}}{m-1} \\ &=\frac{\frac{(n-m+1)(n-m)\cdots m}{(n+m-1)!}-\frac{n!}{(n+m-1)!}}{m-1} \\ &=\frac{(n+m-1)^{\underline{n}}-n!}{(m-1)(n+m-1)!} \end{aligned} \]

例 3

求证:

\[\sum_{i=0}^{n} {i\choose m}={n+1 \choose m+1} \]

(上指标求和)

我们有 \(\displaystyle {n\choose k}=\frac{n^{\underline{k}}}{k!}\)

于是

\[\begin{aligned} \sum_{i=0}^n {i\choose m}&=\sum_{i=0}^{n}\frac{i^{\underline{m}}}{m!} \\ &=\frac{1}{m!}{\sum}_0^{n+1} \Delta \frac{x^{\underline{m+1}}}{m+1} \delta x \\ &=\frac{1}{m!}\frac{(n+1)^{\underline{m+1}}}{m+1} \\ &=\frac{(n+1)^{\underline{m+1}}}{(m+1)}! \\ &={n+1\choose m+1} \end{aligned} \]

现在将有限和无限积分表对照如下。

$f $ \(\sum f\) \(f\) \(\displaystyle \int f\)
\(x^{\underline{n}}\) \(\displaystyle \frac{x^{\underline{n+1}}}{n+1}\) \(x^n\) \(\displaystyle \frac{x^{n+1}}{n+1}\)
\(2^x\) \(2^x\) \(\mathrm{e}^x\) \(\mathrm{e}^x\)
\(a^x\) \(\displaystyle \frac{a^x}{a-1}\) \(a^x\) \(a^x\ln a\)

Stirling 数与下降幂

我们知道,下降幂在有限微积分中担当起了无限微积分中幂函数的职责。但是我们常见的是幂函数,我们需要将幂函数转为下降幂。

我们有

\[x^n=\sum_{k=0}^n {n\brace k} x^{\underline{k}} \]

\[x^{\underline{n}}=\sum_{k=0}^{n} {n\brack k}(-1)^{n-k} x^k \]

其中 \(\displaystyle {n\brace k}\) 表示第二类 Stirling 数,即将 \(n\) 个元素分进 \(k\) 个集合(不计集合的顺序)的方案数,\(\displaystyle {n\brack k}\) 表示第一类 Stirling 数,即将 \(n\) 个元素分进 \(k\) 个环里(不计环的顺序)的方案数。

由此我们得到 \(1\sim n\)\(k\) 次幂和的公式。

\[\begin{aligned} \sum_{i=0}^{n} i^k&=\sum_{i=0}^n\sum_{j=0}^{k}{k\brace j} i^{\underline{j}} \\ &=\sum_{j=0}^k {k\brace j}\sum_{i=0}^{n} i^{\underline{j}} \\ &=\sum_{j=0}^k {k\brace j}{\sum}_{0}^{n+1} \Delta \frac{x^{\underline{j+1}}}{j+1} \delta x\\ &=\sum_{j=0}^k {k\brace j}\frac{(n+1)^{\underline{j+1}}}{j+1} \end{aligned} \]

P4948 数列求和

\[\sum_{i=1}^n i^k a^i \]

其中 \(n\leq 10^{18}\)\(k\leq 2\times 10^3\)

\[\begin{aligned} \sum_{i=1}^n i^k a^i&=\sum_{i=1}^na^i\sum_{j=0}^k {k\brace j}i^{\underline{j}} \\ &=\sum_{j=0}^{k} {k\brace j}\sum_{i=1}^n a^ii^{\underline{j}} \\ &=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}a^xx^{\underline{j}}\delta x \end{aligned} \]

进行分类讨论。

  • \(a=1\)

\[\begin{aligned} &=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}x^{\underline{j}}\delta x \\ &=\sum_{j=0}^k {k\brace j}\frac{(n+1)^{\underline{j}}-1^{\underline{j}}}{j+1} \end{aligned} \]

预处理 \(\Theta(k^2)\)\(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。

  • \(a\neq 1\)

我们有

\[\Delta uv=u\Delta v+\mathbf{E}v\Delta u \]

两边同时求和,得

\[uv=\sum u\Delta v\delta x+\sum\mathbf{E}v\Delta u\delta x \]

\[\sum u\Delta v\delta x=uv-\sum\mathbf{E}v\Delta u\delta x \]

考虑求出 \(a^xx^{\underline{j}}\) 的“原和式”(不定和式)。我们不妨令 \(u=a^x\)\(\Delta v=x^{\underline{j}}\)(则 \(v=\dfrac{x^{\underline{j+1}}}{j+1}\)

于是 \(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j+1}}}{j+1}-\sum (x+1)^{\underline{j}}(a-1)a^x\delta x\)

好像不可做。如果令 \(u=x^{\underline{j}}\)\(\Delta v=a^x\)(则 \(v=\dfrac{a^x}{a-1}\))呢?

代入得到

\(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j}}}{a-1}-\sum \dfrac{a^{x+1}}{a-1}jx^{\underline{j-1}}\delta x\)

也就是说

\[{\sum}_0^{n+1} a^xx^j=\frac{a^xx^j}{a-1}\bigg|_{0}^{n+1}-\frac{j\cdot a}{a-1}{\sum}_0^{n+1} a^xx^{\underline{j-1}}\delta x \]

边界为 \(j=0\) 时,\(\sum a^xx^j\delta x=\sum a^x\delta x=\dfrac{a^x}{a-1}\)

预处理 \(\Theta(k^2)\)\(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。

综上,我们在 \(\Theta(k^2)\)\(\Theta(k\log k)\) 的复杂度内解决了本题。


类比于无限微积分中高阶导数的概念,我们在有限微积分中也有高阶差分。

我们可以定义 \(f\)\(n\) 阶差分

\[\Delta^n f= \begin{cases} f, & n=0 \\ \Delta(\Delta^{n-1} f) & n\gt 0 \end{cases} \]

我们注意到

\[\mathbf{E}f=f(x+1) \]

\[\Delta f=f(x+1)-f(x) \]

所以我们不难得到 \(\Delta=\mathbf{E}-1\)

于是我们有

\[\Delta^n f=(\mathbf{E}-1)^n f=\sum_{k=0}^n {n\choose k}(-1)^{n-k}\mathbf{E}^k f \]

\(\mathbf{E}^k\) 类似 \(\Delta^k\) 递归地定义。

P5907 数列求和加强版 / SPOJ MOON4

\[\sum_{i=1}^n i^k a^i \]

其中 \(\boldsymbol{k\leq 10^7}\)

\(\displaystyle f(n)={\sum}_0^n x^ka^x\delta x\),答案即为 \(f(n+1)-f(1)\)

注意到在普通版中我们有

\[\begin{aligned} \sum a^xx^k\delta x&=\dfrac{\textcolor{red}{a^x}x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\textcolor{red}{a^{x}}\sum x^{\underline{k-1}}\delta x \\ &=a^x\left(\frac{x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\sum x^{\underline{k-1}}\right) \end{aligned} \]

\(a^x\) 右边的那一包东西显然是一个 \(k\) 次多项式,不妨设为 \(g(x)\)。则我们有

\[{\sum}_l^r a^xx^k\delta x=a^rg(r)-a^lg(l) \]

\[f(n)=a^ng(n)-a^0g(0) \]

如果我们能知道 \(g(0),g(1),\cdots,g(n)\) 的点值,就不难应用 Lagrange 插值法在 \(\Theta(k)\) 内求出 \(g(n+1)\)。那么问题转化为如何求 \(g(0),g(1),\cdots,g(n)\)

我们考虑到

\[f(n)=a^ng(n)-a^0g(0) \]

\[g(n)=\frac{f(n)+g(0)}{a^{n}} \]

\(f(0),f(1),\cdots,f(k)\) 可以 \(\Theta(k)\) 递推。那么现在的当务之急就是求出 \(g(0)\) 了。

我们知道 \(\deg g=k\),这意味着 \(\Delta^{k+1} g=0\)

于是

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}\mathbf{E}^{i}g(0)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}g(i)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}[f(i)+g(0)]=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}g(0)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+(a^{-1}-1)^{k+1}g(0)=0 \]

\[g(0)=-(a^{-1}-1)^{-(k+1)}\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i) \]

不难 \(\Theta(k)\) 求出。综上我们在 \(\Theta(k)\) 的时间复杂度内解决了本题。

答案即为 \(a^{n+1}g(n+1)-a\cdot g(1)\)

顺便讲一下如何 \(\Theta(k)\) 插值。

注意到我们只需要算 \(g(n+1)\)

我们有

\[g(n+1)=\sum_{i=0}^{k}g(i)\frac{\prod_{j\neq i}(n+1-j)}{\prod_{j\neq i}(i-j)}\]

分母就是

\[i(i-1)\cdots 2\cdot 1\cdot (-1)\cdot (-2)\cdots (i-k) \]

即为

\[(-1)^{k-i}i!(k-i)! \]

分子就是

\[\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{n+1-i} \]

所以分式即为

\[(-1)^{k-i}\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{(n+1-i)i!(k-i)!} \]

可以前后缀预处理做到严格 \(\Theta(k)\)

P5364 [SNOI2017] 礼物

定义数列 \(\{a_i\}\)

\[a_i=\begin{cases} 1, & i=1 \\ i^k+\displaystyle \sum_{j=1}^{i-1} a_j & i\gt 1 \end{cases} \]

求出 \(a_n\),对 \((10^9+7)\) 取模。

\(n\leq 10^{18}, k\leq 10\)

解法 1:倍增

注意到

\[a_1=1^k \]

\[a_2=2^k+1^k \]

\[a_3=3^k+\overbrace{(2^k+1^k)}^{a_2}+1^k=3^k+2^k+2\cdot 1^k \]

\[a_4=4^k+\overbrace{3^k+2^k+2\cdot 1^k}^{a_3}+\overbrace{(2^k+1^k)}^{a_2}+1^k=4^k+3^k+2\cdot 2^k+4\cdot 1^k \]

\[\begin{aligned} a_5&=5^k+\overbrace{4^k+3^k+2\cdot 2^k+4\cdot 1^k}^{a_4}+\overbrace{3^k+2^k+2\cdot 1^k}^{a_3}+\overbrace{(2^k+1^k)}^{a_2}+1^k \\ &=5^k+4^k+2\cdot 3^k+4\cdot 2^k+8\cdot 1^k \end{aligned} \]

不难找出规律

\[a_n=n^k+\sum_{i=1}^{n-1} 2^{n-1-i}\cdot i^k \]

考虑计算 \(f(n,k)=\sum_{i=1}^n 2^{n-i}i^k\)。于是答案为 \(n^k+f(n-1,k)\)

稍微扰动一下。

\[\begin{aligned} \sum_{i=1}^{n} 2^{n-i}i^k&=2^{n-1}+\sum_{i=2}^{n} 2^{n-i}i^k \\ &=2^{n-1}+\sum_{i=1}^{n-1} 2^{n-i-1}(i+1)^k\\ &=2^{n-1}+2^{-1}\sum_{i=1}^{n-1} 2^{n-i}\sum_{p=0}^k {k\choose p} i^p \\ &=2^{n-1}+2^{-1}\sum_{p=0}^k {k\choose p} \sum_{i=1}^{n-1} 2^{n-i}\cdot i^{p} \\ &=2^{n-1}+2^{-1}\sum_{p=0}^k {k\choose p} f(n-1,p) \end{aligned} \]

这样是 \(\Theta(nk)\) 的(比暴力还慢)。我们考虑倍增。

假设 \(n\) 为偶数。

以下设 \(N=\dfrac{n}{2}\)

\[f(N,k)=(N)^k+2\cdot (N-1)^k+\cdots +2^{N-1}\cdot 1^k \]

\[\begin{aligned} f(n,k)&=n^k+2\cdot(n-1)^k+\cdots+{2^{N}(N)^k+2^{N+1}(N-1)^k+\cdots +2^{N+N-1}\cdot 1^k} \\ &=n^k+2\cdot(n-1)^k+\cdots+2^{N-1}(N+1)^k+2^{N}\cdot f(N,k) \end{aligned} \]

那么现在压力给到计算

\[\begin{aligned} \sum_{i=N+1}^{n}2^{n-i}i^k&= \sum_{i=1}^{N}2^{n-i-N}(i+N)^k \\ &=\sum_{i=1}^{N} 2^{N-i}\sum_{p=0}^{k} {k\choose p}i^{p}N^{k-p} \\ &=\sum_{p=0}^{k} {k\choose p}N^{k-p} \sum_{i=1}^{N} 2^{N-i}i^{p} \\ &=\sum_{p=0}^k {k\choose p} N^{k-p} f(N,p) \end{aligned} \]

于是我们得到

\[f(n,k)=\begin{cases}\displaystyle 2^{N}\cdot f(N,k)+ 2^{n-2N}\sum_{p=0}^k {k\choose p} N^{k-p} f(N,p), & n\equiv 0\pmod 2\\ 2\cdot f(n-1,k)+n^k & n\equiv 1\pmod 2 \end{cases} \]

时间复杂度 \(\Theta(k\log n)\)

解法 2:Stirling 数

我们知道

\[i^n=\sum_{k=0}^{n} {n\brace k} i^{\underline{k}} \]

考虑计算

\[\begin{aligned} f(n,k)&=\sum_{i=1}^n 2^{n-i}i^k \\ &=\sum_{i=1}^n 2^{n-i}\sum_{j=0}^{k} {k\brace j} i^{\underline{j}} \\ &=\sum_{i=1}^n 2^{n-i}\sum_{j=0}^{k} {k\brace j} j!{i\choose j} \\ &=\sum_{j=0}^{k}{k\brace j}j!\sum_{i=j}^{n} 2^{n-i}{i\choose j} \end{aligned} \]

\(g(x)=\sum_{i=x}^{n} 2^{n-i}{i\choose x}\),考虑扰动。

\[\begin{aligned} g(m)&=\sum_{i=m}^{n}2^{n-i}{i\choose m} \\ &=2^{n-m}+\sum_{i=m+1}^{n}2^{n-i}{i\choose m}\\ &=2^{n-m}+\sum_{i=m+1}^n 2^{n-i} \left({i+1\choose m+1}-{i\choose m+1}\right) \\ &=2^{n-m}-g(m+1)+\sum_{i=m+1}^{n}2^{n-i}{i+1\choose m+1} \\ &=2^{n-m}-g(m+1)+\sum_{i=m+2}^{n+1} 2^{n-i+1}{i\choose m+1} \\ &=2^{n-m}-g(m+1)+{n+1\choose m+1}+2\sum_{i=m+2}^{n} 2^{n-i}{i\choose m+1} \\ &=2^{n-m}-g(m+1)+{n+1\choose m+1}+2\sum_{i=m+1}^{n} 2^{n-i}{i\choose m+1}-\cdot 2^{n-m}\\ &=g(m+1)+{n+1\choose m+1} \end{aligned} \]

我们得到了 \(g\) 的递推式。而 \(g(0)=\sum_{i=0}^n 2^{n-i}=2^{n+1}-1\),于是可以 \(\Theta(n)\) 递推出 \(g\)

然后只需要预处理第二类 Stirling 数即可,时间复杂度瓶颈在预处理第二类 Stirling 数上,依照实现可以为 \(\Theta(k^2)\)\(\Theta(k\log k)\)

P5430 [SNOI2017] 礼物 加强版

定义数列 \(\{a_i\}\)

\[a_i=\begin{cases} 1, & i=1 \\ i^k+\displaystyle \sum_{j=1}^{i-1} a_j & i\gt 1 \end{cases} \]

求出 \(a_n\),对 \((10^9+7)\) 取模。

\(\textcolor{red}{n\leq 10^{10^{5}}, k\leq 2\times 10^7}\)

考虑

\[f(n)=\sum_{i=1}^n 2^{n-i}i^k \]

如果令 \(a=2^{-1}\) 那么

\[f(n)=2^n \sum_{i=1}^{n} a^ii^k \]

然后就是 P5907 数列求和加强版 / SPOJ MOON4 了。

注意到我们有 \(n\leq 10^{10^5}\)。于是我们需要维护 \(n\bmod \varphi(p)\)\(n\bmod {p}\) 后的值。

注意本题由于 \(k\leq 2\times 10^7\) 需要卡空间常数。

P6620 [省选联考 2020 A 卷] 组合数问题

计算

\[\left(\sum_{k=0}^{n}f(k)\times x^k\times \binom{n}{k}\right)\bmod p \]

其中 \(n\leq 10^9\)\(m=\deg f\leq \min(n,10^3)\)

我们有结论

\[{n\choose k}k^{\underline{m}}={n-m\choose k-m} n^{\underline{m}} \]

其实如果你把它换个形式,就是

\[{n\choose k}{k\choose m}={n-m\choose k-m}{n\choose m} \]

证明:

\(n\) 个里面选 \(k\) 个(记为集合 \(A\)),再从 \(k\) 个里面选 \(m\) 个(记为集合 \(B\)),等价于从 \(n\) 个里面选 \(m\) 个(集合 \(B\)),再从 \((n-k)\) 个里面选出 \((m-k)\) 个(\(A\backslash B\))。

于是设 \(f=\sum_{i=0}^m b_i x^{\underline{i}}\),对于每一个单项式,我们有

\[\begin{aligned} &=b_i \sum_{k=0}^n {n\choose k}k^{\underline{i}} x^k \\ &=b_i{n^{\underline{i}}}\sum_{k=0}^n {n-i\choose k-i}x^k \\ &=b_i\cdot x^i{n^{\underline{i}}}\sum_{k=0}^{n-i}{n-i\choose k} x^k\\ &=b_i\cdot x^i{n^{\underline{i}}}(1+x)^{n-i} \end{aligned} \]

其中第三个等号处改为了枚举 \((k-i)\) 的值。

然后考虑转下降幂多项式。

\[\begin{aligned} \sum_{k=0}^m a_kx^k&=\sum_{k=0}^m a_k\sum_{i=0}^k {k\brace i}x^{\underline{i}} \\ &=\sum_{i=0}^m x^{\underline{i}} \sum_{k=i}^m {k\brace i} a_k \end{aligned} \]

于是

\[b_i=\sum_{k=i}^m {k\brace i}a_k \]

\(\Theta(m^2)\) 预处理第二类 Stirling 数即可。总复杂度 \(\Theta(m^2)\)

启示:重视基本公式。考虑枚举整体。

P6667 [清华集训2016] 如何优雅地求和

\[F(x)=\sum_{k=0}^{n}f(k)\binom nkx^k(1−x)^{n−k} \]

\(F(x) \bmod 998244353\)

\(f\) 由点值形式给出,分别给定了 \(f(0),f(1),\cdots,f(m)\)

\(n\leq 10^9\)\(m\leq 2×10^4\)

由上题的启示,考虑拆成下降幂多项式做。

于是

\[\begin{aligned} &=b_i\sum_{k=0}^n {n\choose k}k^{\underline{i}} x^k (1-x)^{n-k} \\ &=b_in^{\underline{i}}\sum_{k=0}^n {n-i\choose k-i} x^k (1-x)^{n-k} \\ &=b_i n^{\underline{i}} \sum_{k=0}^{n-i}{n-i\choose k}x^{i+k}(1-x)^{n-k-i} \\ &=b_in^{\underline{i}}x^i \sum_{k=0}^{n-i}{n-i\choose k}x^{k}(1-x)^{n-k} \\ &=b_in^{\underline{i}}x^i \end{aligned} \]

至于转下降幂多项式,由于题目给定了 \(f(0),f(1),\cdots,f(n)\),令 \(f_i=\dfrac{f(i)}{i!}\)\(g_i=\dfrac{1}{i!}\),则下降幂的系数序列为 \(f\cdot g^{-1}\)

时间复杂度 \(\Theta(n\log n)\)

CF1278F Cards

转化题意。不难发现题目给定的事件发生的概率是 \(p=m^{-1}\),并且这是一个非常显然的二项分布的模型。

问题转化为:求 \(\mathbb{E}[x^k]\),即

\[\sum_{i=0}^n i^k{n\choose i}p^{i}(1-p)^{n-i} \]

暴力推式子。

\[\begin{aligned} &\sum_{i=0}^n i^k{n\choose i}p^{i}(1-p)^{n-i} \\ =&\sum_{i=0}^np^{i}(1-p)^{n-i}\sum_{j=0}^k{k\brace j} {n\choose i}i^{\underline{j}} \end{aligned} \]

我们有组合恒等式 \(\displaystyle {n\choose m}{m\choose r}={n\choose r}{n-r\choose m-r}\),即 \(\displaystyle {n\choose m}\frac{m^{\underline{r}}}{r!}={n-r\choose m-r}\frac{n^{\underline{r}}}{r!}\)

消去 \(r!\),发现就是式子里面的形式,代入得

\[\begin{aligned} =&\sum_{i=0}^np^{i}(1-p)^{n-i}\sum_{j=0}^k{k\brace j}{n-j\choose i-j} n^{\underline{j}} \\ =&\sum_{j=0}^k{k\brace j}n^{\underline{j}} \sum_{i=0}^np^{i}{n-j\choose i-j}(1-p)^{n-i} \\ =&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} \sum_{i=0}^n{n-j\choose i-j}p^{i-j}(1-p)^{n-i} \end{aligned} \]

注意到右边很像一个二项式定理的形式,我们改为枚举 \(i-j\)。那么得到

\[\begin{aligned} =&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} \sum_{i=0}^{n-j}{n-j\choose i}p^{i}(1-p)^{(n-j)-i} \\ =&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} (p+1-p)^{n-j} \\ =&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} \end{aligned} \]

预处理 Stirling 数即可在 \(\Theta(k^2)\)\(\Theta(k\log k)\) 内解决本题。

P6031 [CF1278F Cards] 的加强版

加强版要求线性时间内给出答案。

\[m^n=\sum_{k=0}^{n}{n\brace k}m^{\underline{k}}=\sum_{k=0}^{\textcolor{cyan}{n}} {m\choose k}{n\brace k}k! \]

\(g(m)=m^n\)\(f(k)={n\brace k}k!\)。进行二项式反演,我们得到

\[m^n=\sum_{k=0}^{\textcolor{cyan}{m}} {m\choose k}{n\brace k}k!\iff {n\brace m}=\frac{1}{m!}\sum_{k=0}^m {m\choose k}(-1)^{m-k}k^n \]

代入原版中最后的式子,得到

\[\begin{aligned} &\sum_{i=0}^kn^{\underline{i}}p^i\frac{1}{i!}\sum_{j=0}^{i}{i\choose j}(-1)^{i-j}j^k\\ =&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k {i\choose j}\frac{n^{\underline{i}}}{i!}(-p)^i \\ =&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k \textcolor{cyan}{{n\choose i}{i\choose j}}(-p)^i \\ =&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k \textcolor{cyan}{{n\choose j}{n-j\choose i-j}}(-p)^i \\ =&\sum_{j=0}^k{n\choose j}(-1)^jj^k\sum_{i=j}^k {n-j\choose i-j}(-p)^i \\ =&\sum_{j=0}^k{n\choose j}(-1)^jj^k\sum_{i=0}^{k-j} {n-j\choose i}(-p)^{i+j} \\ =&\sum_{j=0}^k{n\choose j}(-1)^jj^k(-p)^j\sum_{i=0}^{k-j} {n-j\choose i}(-p)^i \end{aligned} \]

\(P=-p\),记 \(\displaystyle f(j)=\sum_{i=0}^{k-j}{n-j\choose i}P^i\)。发现瓶颈在这里,考虑怎么快速地递推。

考虑 \(f(j-1)-f(j)\)

\[\begin{aligned} f(j-1)-f(j)&=\sum_{i=0}^{k-j+1}{n-j+1\choose i}P^i-\sum_{i=0}^{k-j}{n-j\choose i}P^i \\ &={n-j+1\choose k-j+1}P^{k-j+1}+\sum_{i=0}^{k-j}\left[{n-j+1\choose i}-{n-j\choose i}\right]P^i \\ &={n-j+1\choose k-j+1}P^{k-j+1}+\sum_{i=0}^{k-j}{n-j\choose i-1}P^i \\ &={n-j+1\choose k-j+1}P^{k-j+1}+P\sum_{i=0}^{k-j-1}{n-j\choose i}P^i \\ =&{n-j+1\choose k-j+1}P^{k-j+1}+P\left[f(j)-{n-j\choose k-j}P^{k-j}\right] \\ =&{n-j+1\choose k-j+1}P^{k-j+1}-{n-j\choose k-j}P^{k-j+1}+P\cdot f(j)\\ =&{n-j\choose k-j+1}P^{k-j+1}+P\cdot f(j) \end{aligned} \]

反解出

\[f(j)=\frac{1}{1+P}\left[f(j-1)-{n-j\choose k-j+1}P^{k-j+1}\right] \]

于是可以直接递推,边界是 \(f(0)=1\)

预处理出阶乘等,我们就在严格 \(\Theta(k)\) 的时间内解决了本题。

P5349 幂

给定 \(m\) 次多项式 \(f\) 和有理数 \(r\in (0,1)\),求

\[\sum_{n=0}^{+\infty} f(n)r^n \]

\(998,422,353\)。其中 \(m\leq 10^5\)。多项式以系数形式给出。

考虑对于单项式怎么做。

也就是求

\[\begin{aligned} \sum_{n=0}^{+\infty} n^kr^n &= \dfrac{r^nn^{\underline{k}}}{r-1}-\sum \dfrac{r^{n+1}}{r-1}kn^{\underline{k-1}}\delta \end{aligned} \]

单位根反演

很厉害的一个 trick。

引理

\[[k\mid n]=\sum_{d=0}^{n-1} \omega_k^{nd} \]

P5591 小猪佩奇学数学

参考资料

算法学习笔记(9):二项式反演 - GhostLX

二项式反演 - Meteor

有限微积分 - wangrx

posted @ 2024-02-05 19:31  Starrykiller  阅读(63)  评论(0)    收藏  举报