开头
我只知道容斥不知道二项式反演。
反演,顾名思义就是有两个函数 \(f,g\),知道 \(f\) 用 \(g\) 表示后反过来 \(g\) 用 \(f\) 表示。
二项式,\((a+b)^n\),别学了二项式反演忘了二项式定理:
\[\sum_{i=0}^n\binom{n}{i}a^ib^{n-i}=(a+b)^n
\]
常见形式
(一)
式子
\[\begin{aligned}
f(n)=\sum_{i=0}^n& (-1)^i\binom{n}{i}g(i)
\\ & \Updownarrow \\
g(n)=\sum_{i=0}^n& (-1)^i\binom{n}{i}f(i)
\end{aligned}
\]
证明
\[\begin{aligned}
& \sum_{i=0}^n(-1)^i\binom{n}{i}f(i)
\\=& \sum_{i=0}^n(-1)^i\binom{n}{i}\sum_{j=0}^i(-1)^j\binom{i}{j}g(j)
\\=& \sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=j}^n(-1)^{i-j}\binom{n-j}{i-j}
\\=& \sum_{j=0}^ng(j)\binom{n}{j}[n-j=0]
\\=& g(n)
\end{aligned}
\]
(二)
式子
\[\begin{aligned}
f(n)=\sum_{i=n}^N& (-1)^i\binom{i}{n}g(i)
\\ & \Updownarrow \\
g(n)=\sum_{i=n}^N& (-1)^i\binom{i}{n}f(i)
\end{aligned}
\]
证明
\[\begin{aligned}
& \sum_{i=n}^N(-1)^i\binom{i}{n}f(i)
\\=& \sum_{i=n}^N(-1)^i\binom{i}{n}\sum_{j=i}^N(-1)^j\binom{j}{i}g(j)
\\=& \sum_{j=n}^Ng(j)(-1)^{j-n}\binom{j}{n}\sum_{i=n}^j(-1)^{i-n}\binom{j-n}{i-n}
\\=& \sum_{j=n}^Ng(j)(-1)^{j-n}\binom{j}{n}[j-n=0]
\\=& g(n)
\end{aligned}
\]
证明的总结
由于两个式子都是对称的,所以都只证明了充分性。
证明都用到了
\[\binom{a}{b}\binom{b}{c}=\binom{a}{c}\binom{a-c}{b-c}
\]
和
\[[n=0]=\sum_{i=0}^{n}\binom{n}{i}(-1)^i
\]
多元的情况
我们拿二元举例子:
\[\begin{aligned}
f(n,m)=\sum_{i=0}^n\sum_{j=0}^m(-& 1)^{i+j}\binom{n}{i}\binom{m}{j}g(i,j)
\\ \Updownarrow \\
g(n,m)=\sum_{i=0}^n\sum_{j=0}^m(-& 1)^{i+j}\binom{n}{i}\binom{m}{j}f(i,j)
\end{aligned}\]
其他应该同理。
例题
第二类斯特林数
我不会,长大后再学习。(
错排
\(g(x)\) 表示 \(n\) 个位置中至多有 \(x\) 个位置放错的方案数,而 \(f(x)\) 表示恰好。
\[g(n)=n!
\\
g(n)=\sum_{i=0}^{n}\binom{n}{i}f(i)
\]
反演
\[\begin{aligned}
f(n)&=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}g(i)
\\&=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}i!
\\&=\sum_{i=0}^{n}(-1)^{n-i}\frac{n!}{(n-i)!}
\\&=n!\sum_{i=0}^{n}\frac{(-1)^{n-i}}{(n-i)!}
\\&=n!\sum_{i=0}^{n}\frac{(-1)^i}{i!}
\end{aligned}\]
错排通项由此诞生。
由于后面的和式是 \(e^{-1}\) 的泰勒展开,所以我们得到:
任意一个排列,当 \(n\to\infty\),该排列为错排的概率为 \(\dfrac{1}{e}\)。
P.S.
错排递推式 \(f_n=(n-1)(f_{n-1}+f_{n-2})\)。
若 \(n\) 所在环为二元环,删掉二元环后是错排,\((n-1)f_{n-2}\)。
否则环长至少为三,将 \(n\) 前后接起来跳过 \(n\) 后是错排,\((n-1)f_{n-1}\)。
P4859 已经没有什么好害怕的了
给定 \(n\le 2000\) 长度的序列 \(a_1,\dots,a_n\) 和 \(b_1,\dots,b_n\),\(2n\) 个元素两两不同,求排列 \(p_1,\dots,p_n\) 的个数使得(以下的 \(k\) 为原题的 \(\frac{n+k}{2}\)):
\[\sum_{i=1}^n[a_i>b_{p_i}]=k
\]
设 \(f(x)\) 表示恰好 \(x\) 组 \([a_i>b_{p_i}]\) 的 \(\{p\}\) 的方案数,显然答案为 \(f(k)\)。
而 \(g(x)\) 表示钦定 \(x\) 组…………的方案数。
钦定和至少的区别
钦定指固定某些位置满足条件,而至少只是单纯的计数。
举个例子,假设要计数值域 \(0,1\) 的 \(a_1,a_2,a_3,a_4\) 序列中 \(a_i=1\) 个数不少于 \(2\) 个的方案数。
对于 \(\{a\}=\{0,1,1,1\}\) 来说:
至少:贡献为 \(1\),因为就一种状态。
钦定:贡献为 \(3\),因为序列中 \(3\) 个 \(1\),我们钦定任意 \(2\) 个为 \(1\) 都会产生贡献,所以贡献为 \(\binom{3}{2}=3\)。
显然
\[g(x)=\sum_{i=x}^n\binom{i}{x}f(i)
\]
二项式反演
\[f(x)=\sum_{i=x}^n(-1)^{i-x}\binom{i}{x}g(i)
\\
Ans=f(k)=\sum_{i=k}^n(-1)^{i-k}\binom{i}{k}g(i)
\]
问题转化为求 \(g(k),\dots,g(n)\)。
首先我们可以将 \(\{a\},\{b\}\) 升序排序,由于值互不相同,所以可求 \(c_1,\dots,c_n\) 使得 \(b_{c_i}\le a_i\le b_{c_i+1}\)。
我们考虑 DP,\(dp(i,j)\) 表示 \(a\) 的前 \(i\) 个中有 \(j\) 个钦定匹配了比她小的 \(b\) 值,即有
\[dp(i,j)=dp(i-1,j)+dp(i-1,j-1)\cdot(c_i-(j-1))
\]
然后 \(g(i)=dp(n,i)\cdot (n-i)!\) 就做完了。
时间 \(O(n^2)\)。
record
CF997C Sky Full of Stars
有一个 \(n\times n\) 的正方形网格,用红绿蓝三种颜色染色,求有多少种染色方案使得至少一行或一列是同一种颜色。
结果对 \(998244353\) 取模。
设 \(f(i,j)\) 表示恰好 \(i\) 行与 \(j\) 列颜色相同,而 \(g(i,j)\) 表示钦定 \(i\) 行与 \(j\) 列颜色相同。
\[g(x,y)=\sum_{i=x}^n\sum_{j=y}^n\binom{i}{x}\binom{j}{y}f(i,j)
\]
二项式反演
\[f(x,y)=\sum_{i=x}^n\sum_{j=y}^n(-1)^{i+j-x-y}\binom{i}{x}\binom{j}{y}g(i,j)
\\
\begin{aligned}
Ans&=3^{n^2}-f(0,0)
\\&=3^{n^2}-\sum_{i=0}^n\sum_{j=0}^n(-1)^{i+j}g(i,j)
\end{aligned}
\]
求 \(g(i,j)\) 要分类:
- \(i\ne 0,j\ne 0\),此时钦定的同色行列颜色必然全部一样,即
\[g(i,j)=\binom{n}{i}\binom{n}{j}3^{(n-i)(n-j)+1}
\]
- \(i\ne 0,j=0\)(\(i=0,j\ne 0\) 情况类似),此时这些行之间颜色可以不同,即
\[g(i,0)=\binom{n}{i}3^{n(n-i)+i}
\]
- \(i=j=0\),此时自由了
我向往自由!
\[g(0,0)=3^{n^2}
\]
综上
\[\begin{aligned}
Ans&=-2\sum_{i=1}^n(-1)^{i}g(i,0)-\sum_{i=1}^n\sum_{j=1}^n(-1)^{i+j}g(i,j)
\\&=-2A-B
\end{aligned}
\\
A=\sum_{i=1}^n(-1)^{i}\binom{n}{i}3^{n(n-i)+i}
\\
B=\sum_{i=1}^n\sum_{j=1}^n(-1)^{i+j}\binom{n}{i}\binom{n}{j}3^{(n-i)(n-j)+1}
\]
\(A,B\) 分开求(分别均使用二项式定理)
\[\begin{aligned}
A&=3^{n^2}\sum_{i=1}^n(-1)^{i}\binom{n}{i}3^{-ni+i}
\\&=3^{n^2}\sum_{i=1}^n\binom{n}{i}(-3^{1-n})^{i}
\\&=3^{n^2}((1-3^{1-n})^{n}-1)
\end{aligned}\]
\[\begin{aligned}
B&=3^{n^2+1}\sum_{i=1}^n\sum_{j=1}^n(-1)^{i+j}\binom{n}{i}\binom{n}{j}3^{-ni-nj+ij}
\\&=3^{n^2+1}\sum_{i=1}^n(-1)^i\binom{n}{i}3^{-ni}\sum_{j=1}^n(-1)^j\binom{n}{j}3^{(i-n)j}
\\&=3^{n^2+1}\sum_{i=1}^n(-1)^i\binom{n}{i}3^{-ni}\sum_{j=1}^n\binom{n}{j}(-3^{i-n})^j
\\&=3^{n^2+1}\sum_{i=1}^n(-1)^i\binom{n}{i}3^{-ni}((1-3^{i-n})^n-1)
\end{aligned}\]
所以就 \(O(n\log n)\) 解决了。
record
P6076 [JSOI2015]染色问题
\(n\times m\) 的矩形棋盘,初始无色。现在有 \(C\) 种颜料涂,要求:
-
棋盘的每一行/列至少有一个小方格被染色。
-
每种颜色都在棋盘上出现至少一次。
求染色方案数 \(\bmod 10^9+7\)。
一样的套路,我们发现设 \(f(i,j,k)\) 表示恰好 \(i,j\) 行/列至少有一个染色,\(k\) 种颜色被上在墙上的方案数比较困难。
正难则反,设 \(f(i,j,k)\) 表示恰好 \(i,j\) 行/列完全没有染色,\(k\) 种颜色没有上在墙上。
同理 \(g(i,j,k)\) 将 \(f\) 的恰好换成钦定。
有
\[g(i,j,k)=\binom{n}{i}\binom{m}{j}\binom{C}{k}(C-k+1)^{(n-i)(m-j)}
\]
然后求 \(g\) 关于 \(f\) 的表达式
\[g(i,j,k)=\sum_{x=i}^n\sum_{y=j}^m\sum_{z=k}^C
\binom{x}{i}\binom{y}{j}\binom{z}{k}f(x,y,z)
\]
然后三元二项式反演
\[f(i,j,k)=\sum_{x=i}^n\sum_{y=j}^m\sum_{z=k}^C
(-1)^{x+y+z-i-j-k}
\binom{x}{i}\binom{y}{j}\binom{z}{k}g(x,y,z)
\]
然而我们要求的最终答案是 \(f(0,0,0)\) 即(将 \(g\) 一开始的柿子带入)
\[\begin{aligned}
f(0,0,0)&=\sum_{i=0}^n\sum_{j=0}^m\sum_{k=0}^C
(-1)^{i+j+k}g(i,j,k)
\\&=\sum_{i=0}^n\sum_{j=0}^m\sum_{k=0}^C
(-1)^{i+j+k}\binom{n}{i}\binom{m}{j}\binom{C}{k}(C-k+1)^{(n-i)(m-j)}
\\&=\sum_{k=0}^C\sum_{i=0}^n\sum_{j=0}^m
(-1)^{i+j+k}\binom{n}{i}\binom{m}{j}\binom{C}{k}(C-k+1)^{(n-i)(m-j)}
\end{aligned}\]
这样我们在第一层循环时预处理后面的幂,时间复杂度 \(O(nmC)\)。