「学习笔记」二项式反演

二项式反演:

\[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) \]

这个式子可以通过集合相关知识得到(容斥)

然后令:\(h(n)=(-1)^ng(n)\)

那么有

\[f(n)=\sum_{i=0}^n \binom n i h(i) \Leftrightarrow \frac{h(n)}{(-1)^n}=\sum_{i=0}^n \binom n i f(i) \]

然后把式子整理一下,得到第二种表示二项式定理的形式

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

直接带入推导并且交换枚举顺序可以得到:

\[f(n)=\sum_{j=0} ^n f(j)\sum _ {i=j} ^n (-1)^{i-j} \binom n i \binom i j \]

后面的组合数:\(\binom n i \binom i j\) 考虑其组合意义,从 \(n\) 个里面选 \(i\) 个再从 \(i\) 个里面选 \(j\) 个用组合阶乘式子能给推成\(\binom n j\binom {n-j}{i-j}\)

然后再改变枚举顺序,平移一下循环变量

\[f(n)=\sum_{j=0} ^n \binom n j f(j) \sum _ {t=0} ^{n-j} (-1)^t \binom {n-j} t \]

在后面乘上 \(1\) 的对应次方,用二项式定理转一步

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

显然得证(只有\(i=n\)时那个 \((1-1)^{n-j}\) 不为 \(0\)


还有一种相对常见的式子,因为题目中大多会表述为恰好选几个,然后我们用多步容斥(或二项式反演)就会方便求解

\[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) \]

相关证明和上面的类似

例题

已经没有什么好害怕的了

我们设 \(g\) 为正确答案,\(f\) 为至少 \(k\) 个答案

\(dp_{i,j}\) 为前 \(i\) 个选 \(j\)\(A\) 中比 \(B\) 中大的

先看是不是要配对,不要那就是 \(f_{i,j}+=f_{i-1,j}\)

再看如果配对的话,那就是 \(f_{i,j}=f_{i-1,j-1}+(larger(i)-j+1)\)

\(larger(i)\) 表示 \(A_{i}\) 大于几个 \(B_i\),可以用暴力或者单调栈做掉……

\(f_x=dp_{n,x}\times(n-x)!\)

这里上个反演就做完了

\[g_i=\sum_{i=k}^n (-1)^{i-k} \binom i k \times dp_{n,i}\times (n-i)! \]

posted @ 2020-07-25 08:57  yspm  阅读(157)  评论(0编辑  收藏  举报