二项式反演
引入
记 A c A^c Ac表示 A A A的补集。
已知简单的容斥原理为:
∣
⋃
i
=
1
n
A
i
∣
=
∑
p
1
<
p
2
<
⋯
<
p
m
∣
⋂
j
=
1
m
A
p
j
∣
(
−
1
)
m
+
1
|\bigcup_{i=1}^{n} A_i|=\sum_{p_1<p_2<\dots<p_m}|\bigcap_{j=1}^{m}A_{p_j}|(-1)^{m+1}
∣i=1⋃nAi∣=p1<p2<⋯<pm∑∣j=1⋂mApj∣(−1)m+1
根据集合交并补的意义可知:
∣
⋂
i
=
1
n
A
i
c
∣
=
∣
S
∣
−
∣
⋃
i
=
1
n
A
i
∣
∣
⋂
i
=
1
n
A
i
∣
=
∣
S
∣
−
∣
⋃
i
=
1
n
A
i
c
∣
|\bigcap_{i=1}^{n}A_i^c|=|S|-|\bigcup_{i=1}^{n}A_{i}|\\ |\bigcap_{i=1}^{n}A_i|=|S|-|\bigcup_{i=1}^{n}A_{i}^c|
∣i=1⋂nAic∣=∣S∣−∣i=1⋃nAi∣∣i=1⋂nAi∣=∣S∣−∣i=1⋃nAic∣
当然第二条式子可以把
A
i
=
B
i
c
A_{i}=B_{i}^c
Ai=Bic带入第一条,同样能够得到。
学习链接:二项式反演及其应用
各类形式
前置条件
集合的交的大小只和集合的个数有关
记 f ( n ) , g ( n ) f(n),g(n) f(n),g(n)分别表示 n n n个补集的交的大小, g ( n ) g(n) g(n)表示 n n n个原集的交的大小
形式零
由引入中的式子可得:
f
(
n
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
g
(
i
)
g
(
n
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
f
(
i
)
f(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\\ g(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i)\\
f(n)=i=0∑n(−1)i(in)g(i)g(n)=i=0∑n(−1)i(in)f(i)
显然这里
f
(
0
)
=
g
(
0
)
=
∣
S
∣
f(0)=g(0)=|S|
f(0)=g(0)=∣S∣
考虑从代数的角度证明,由于式子是对称的,故只需证等式一即可:
f
(
n
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
g
(
i
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
∑
j
=
0
n
(
−
1
)
j
(
i
j
)
f
(
j
)
=
∑
j
=
0
n
(
−
1
)
j
f
(
j
)
∑
i
=
j
n
(
n
i
)
(
i
j
)
(
−
1
)
i
=
∑
j
=
0
n
(
−
1
)
j
f
(
j
)
∑
i
=
j
n
(
n
j
)
(
n
−
j
i
−
j
)
(
−
1
)
i
=
∑
j
=
0
n
(
−
1
)
j
(
n
j
)
f
(
j
)
∑
k
=
0
n
−
j
(
n
−
j
k
)
(
−
1
)
j
+
k
=
∑
j
=
0
n
(
n
j
)
f
(
j
)
(
1
−
1
)
n
−
j
=
f
(
n
)
\begin{aligned} f(n) & =\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\\ & =\sum_{i=0}^{n}(-1)^i\binom{n}{i}\sum_{j=0}^{n}(-1)^j\binom{i}{j}f(j)\\ & =\sum_{j=0}^{n}(-1)^jf(j)\sum_{i=j}^{n}\binom{n}{i}\binom{i}{j}(-1)^i\\ & =\sum_{j=0}^{n}(-1)^jf(j)\sum_{i=j}^{n}\binom{n}{j}\binom{n-j}{i-j}(-1)^i\\ & =\sum_{j=0}^{n}(-1)^j\binom{n}{j}f(j)\sum_{k=0}^{n-j}\binom{n-j}{k}(-1)^{j+k}\\ & =\sum_{j=0}^{n}\binom{n}{j}f(j)(1-1)^{n-j}\\ & =f(n) \end{aligned}
f(n)=i=0∑n(−1)i(in)g(i)=i=0∑n(−1)i(in)j=0∑n(−1)j(ji)f(j)=j=0∑n(−1)jf(j)i=j∑n(in)(ji)(−1)i=j=0∑n(−1)jf(j)i=j∑n(jn)(i−jn−j)(−1)i=j=0∑n(−1)j(jn)f(j)k=0∑n−j(kn−j)(−1)j+k=j=0∑n(jn)f(j)(1−1)n−j=f(n)
综上,成立,故有如下的等价关系:
f
(
n
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
g
(
i
)
⇔
g
(
n
)
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
f
(
i
)
f(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i)
f(n)=i=0∑n(−1)i(in)g(i)⇔g(n)=i=0∑n(−1)i(in)f(i)
小总结
这里证明过程中比较重要的一点就是把 f ( j ) f(j) f(j)提到求和的第一层,因为想要证明的结论是上面的和式可以化简为 f ( n ) f(n) f(n),由于 f ( k ) f(k) f(k)的取值比较复杂,故可以排除是多个 f ( k ) f(k) f(k)通过系数消除贡献,故证明方向为证明 f ( n ) f(n) f(n)在这个和式中的系数为 1 1 1,其他为 0 0 0。
当然中间还用到了数学中比较常用的还原法,如令 k = i − j k=i-j k=i−j。
这里还有一个比较常见的化简 ( n m ) ( m k ) = ( n k ) ( n − k m − k ) \binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k} (mn)(km)=(kn)(m−kn−k),这个就是从组合意义入手找出等式,然后从代数上简单证明,用到这一步是因为和式中涉及 ( i j ) \binom{i}{j} (ji)这个量,两个枚举的量揉在一起不好算,所以要想办法拆开,不能让上下指标都是变化的。
形式一
有如下关系:
f
(
n
)
=
∑
i
=
0
n
(
n
i
)
g
(
i
)
⇔
g
(
n
)
=
∑
i
=
0
n
(
−
1
)
n
−
i
(
n
i
)
f
(
i
)
f(n)=\sum_{i=0}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f(i)
f(n)=i=0∑n(in)g(i)⇔g(n)=i=0∑n(−1)n−i(in)f(i)
不妨用换元法来证明:
令 h ( n ) = ( − 1 ) n g ( n ) h(n)=(-1)^ng(n) h(n)=(−1)ng(n),那么在这里有 f ( n ) = ∑ i = 0 n ( n i ) ( − 1 ) i h ( i ) f(n)=\sum_{i=0}^{n}\binom{n}{i}(-1)^ih(i) f(n)=∑i=0n(in)(−1)ih(i),根据形式零可知 h ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) f ( i ) h(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i) h(n)=∑i=0n(−1)i(in)f(i),带入解得 g ( n ) = ∑ i = 0 n ( − 1 ) n − i ( n i ) f ( i ) g(n)=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f(i) g(n)=∑i=0n(−1)n−i(in)f(i)。
当然在学习链接中还给出了一个更一般的形式,即下界不是 0 0 0而是任意的 m m m。
证明还是考虑从代数入手,证明技巧和上面类似。(确实已计算过)
故形式一的普适形式为:
f
(
n
)
=
∑
i
=
m
n
(
n
i
)
g
(
i
)
⇔
g
(
n
)
=
∑
i
=
m
n
(
−
1
)
n
−
i
(
n
i
)
f
(
i
)
f(n)=\sum_{i=m}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=m}^{n}(-1)^{n-i}\binom{n}{i}f(i)
f(n)=i=m∑n(in)g(i)⇔g(n)=i=m∑n(−1)n−i(in)f(i)
形式二
与一类似,但是上下指标换了过来:
f
(
n
)
=
∑
i
=
n
m
(
i
n
)
g
(
i
)
⇔
g
(
n
)
=
∑
i
=
n
m
(
−
1
)
i
−
n
(
i
n
)
f
(
i
)
f(n)=\sum_{i=n}^{m}\binom{i}{n}g(i)\Leftrightarrow g(n)=\sum_{i=n}^{m}(-1)^{i-n}\binom{i}{n}f(i)
f(n)=i=n∑m(ni)g(i)⇔g(n)=i=n∑m(−1)i−n(ni)f(i)
证明直接用代数即可,技巧不能说十分相似,只能说完全一致。
当然,这个式子应用较广,因为这个式子有组合意义:
f ( n ) f(n) f(n)表示钦定了 n n n个一定出现的方案数(其他未钦定的可以出现也可以不出现), g ( n ) g(n) g(n)表示恰好出现 n n n个的方案数。
那么根据组合意义可知:
f
(
n
)
=
∑
i
=
n
m
(
i
n
)
g
(
i
)
f(n)=\sum_{i=n}^{m}\binom{i}{n}g(i)
f(n)=i=n∑m(ni)g(i)
即枚举实际上有多少个出现,然后钦定
n
n
n个是出现的。
例题
集合计数
题目链接:集合计数
显然钦定 x x x个出现的方案数为 f ( x ) = ( n x ) ( 2 2 n − x − 1 ) f(x)=\binom{n}{x}(2^{2^{n-x}}-1) f(x)=(xn)(22n−x−1),设 g ( n ) g(n) g(n)表示恰好为 n n n个方案数,那么根据组合意义显然有 f ( x ) = ∑ i = x n ( i x ) g ( i ) f(x)=\sum_{i=x}^{n}\binom{i}{x}g(i) f(x)=∑i=xn(xi)g(i)。
经典的形式二,直接反演就可以得:
g
(
k
)
=
∑
i
=
k
n
(
−
1
)
i
−
k
(
n
i
)
(
i
k
)
(
2
2
n
−
i
−
1
)
g(k)=\sum_{i=k}^{n}(-1)^{i-k}\binom{n}{i}\binom{i}{k}(2^{2^{n-i}}-1)
g(k)=i=k∑n(−1)i−k(in)(ki)(22n−i−1)
实现上预处理
p
i
=
2
2
i
p_i=2^{2^i}
pi=22i即可
O
(
n
)
O(n)
O(n)。
已经没有什么好害怕的了
题目链接:已经没有什么好害怕的了
由于输入的数互不相同,故可以确定最终有 m = n + k 2 m=\frac{n+k}{2} m=2n+k组是 A > B A>B A>B的,所以首先 m m m要是整数。
设 f ( n ) f(n) f(n)表示钦定有 n n n个是 A > B A>B A>B的,设 g ( n ) g(n) g(n)表示恰好有 n n n个是 A > B A>B A>B的,那么显然可以套形式二反演。
把 A , B A,B A,B从大到小排,设 d p i , j dp_{i,j} dpi,j表示 A A A中前 i i i个数有 j j j个是 A > B A>B A>B的。
假如 i i i不钦定 A > B A>B A>B那么 d p i , j = d p i − 1 , j dp_{i,j}=dp_{i-1,j} dpi,j=dpi−1,j;假如钦定 i i i是 A > B A>B A>B的,那么设 c n t cnt cnt表示有 c n t cnt cnt个 B B B是小于 A i A_i Ai的,那么前面会占用 j − 1 j-1 j−1个,故目前的 A i A_i Ai有 c n t − ( j − 1 ) cnt-(j-1) cnt−(j−1)个 B B B可以用来匹配,所以 d p i , j = d p i − 1 , j − 1 ( c n t − j + 1 ) dp_{i,j}=dp_{i-1,j-1}(cnt-j+1) dpi,j=dpi−1,j−1(cnt−j+1)。
然后 f ( n ) f(n) f(n)是钦定,故其他可以随意匹配,那么 f ( x ) = d p n , x ( n − x ) ! f(x)=dp_{n,x}(n-x)! f(x)=dpn,x(n−x)!,然后直接反演求 g ( m ) g(m) g(m)即可。