二项式反演总结
至多形式:
$f[i]=\sum\limits_{j=0}^{i}C_n^i*g[j]\Leftrightarrow g[i]=\sum\limits_{j=0}^{i}(-1)^{i-j}C_i^j*f[j]$
至少形式
$f[i]=\sum\limits_{j=i}^{n}C_j^i*g[j]\Leftrightarrow g[j]=\sum\limits_{j=i}^{n}(-1)^{j-i}C_j^i*f[j]$
只在这里证明一下至多形式,至少形式可以通过几步推到至多形式
考虑把$2$式带入$1$式:
$f[i]=\sum\limits_{j=0}^{i}C_i^j\sum\limits_{k=0}^{j}(-1)^{j-k}*C_j^k*f[k]$
$f[i]=\sum\limits_{j=0}^{i}\sum\limits_{k=0}^{j}\frac{1}{(i-j)!*(j-k)!}*(-1)^{j-k}*f[k]*\frac{i!}{k!}$
$f[i]=\sum\limits_{k=0}^{i}\sum\limits_{j=k}^{i}C_{i-k}^{j-k}(-1)^{j-k}*f[k]*C_i^k$
$f[i]=\sum\limits_{k=0}^{i}f[k]*C_i^k\sum\limits_{j=0}^{i-k}C_{i-k}^{j}(-1)^j$
$f[i]=\sum\limits_{k=0}^{i}f[k]*C_i^k*(1-1)^{i-k}$
$f[i]=f[i]$
下面介绍一些二项式反演的基础题目,来了解一下二项式反演的基本套路
T1hdu1465不容易系列之一
题目描述:大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!
做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。
话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概率,所以至今我都觉得这是一件神奇的事情。如果套用一句经典的评语,我们可以这样总结:一个人做错一道选择题并不难,难的是全部做错,一个不对。
不幸的是,这种小概率事件又发生了,而且就在我们身边:
事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟!
现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的错误方式呢?
也就是错排问题
设$f[i]$代表$i$个元素的全排列,$g[i]$代表恰好$i$个错开的方案数
有:
$f[i]=i!$
$f[i]=\sum\limits_{j=0}^{i}C_i^j*g[j]$
二项式反演得:$g[i]=\sum\limits_{j=0}^{i}(-1)^{i-j}*C_i^j*j!$
T2King's Colors
题目大意:给定一棵n(n<=2500)个节点的树,求恰好用k个颜色染完树且相邻点颜色不能相同的方案数
如果不考虑恰好的限制,答案就是$k*(k-1)^{n-1}$,
设$f[i]$代表至多用$i$个颜色的方案数,$g[i]$代表恰好用$i$个颜色的方案数
有:
$f[i]=i*(i-1)^{n-1}$
$f[i]=\sum\limits_{j=0}^{i}C_i^j*g[j]$
二项式反演得:$g[i]=\sum\limits_{j=0}^{i}(-1)^{i-j}*C_i^j*f[j]$
T3[bzoj2839]集合计数
题目大意:一个有$N$个元素的集合有$2^N$个不同子集(包含空集),现在要在这$2^N$个集合中取出若干集合(至少一个),使得它们的交集的元素个数为$K$,求取法的方案数,答案模1000000007。(是质数喔~)
设$f[i]$代表至少有i个交集的方案数,$g[i]$代表恰好有$i$个交集的方案数
有:
$f[i]=(2^{2^{n-i}}-1)*C_n^i$
$f[i]=\sum_{j=i}^{n}C_j^i*g[j]$
二项式反演得:$g[i]=\sum\limits_{j=i}^{n}(-1)^{j-i}*C_j^i*f[j]$
T4[bzoj3622]已经没有什么好害怕的了
题目大意:给定长度为$n$的$A,B$($n<=2000$),保证$2n$个数互不相同,$A$与$B$互相配对,求$A>B$个比$A<B$的个数恰好多$k$的方案数mod1e9+7
设$f[i]$代表至少$i$对$A>B$的方案数,$g[i]$代表恰好$i$对$A>B$的方案数
首先$A>B$的个数恰好为$\frac{n+k}{2}$($n+k$一定为偶数)
我们发现$f$并不是很好直接求出,考虑$Dp$:
先将$A,B$排序,设$dp[i][j]$代表考虑完$A$的前$i$个数,已经钦定了$j$个$A>B$的方案数
有:
$dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(比A[i]小的B的个数-j+1)$
一种是不给$A[i]$分配,一种是给$A[i]$分配比$A[i]$小的
于是$f[i]=dp[n][i]$,$g[i]$二项式反演得到即可
T5[bzoj4710]分特产
n个人m种物品,第i种物品有a[i]个(无差异),每个人至少有一个,求分配方案数
这道题的思路比较巧妙:把每个人至少有一个转化为恰好$0$个人没有,以迎合二项式反演的形式
(但是假如我们不知道这道题的标签仍能想到这种转化也是很神仙了呢)
设$f[i]$代表至少i个人没有的方案数,$g[i]$代表恰好i个人没有的方案数
有:
$f[i]=C_n^i\prod_{j=1}^{m}C_{a[i]+n-i-1}^{n-i-1}$
$f[i]=\sum\limits_{j=i}^{n}C_j^i*g[j]$
二项式反演求出$g[0]$便是答案
T6染色
设$f[i]$代表至少$S$次有$i$个的方案数,$g[i]$代表恰好的方案数
有:
$f[i]=C_m^i*C_{n}^{i*S}*\frac{(i*S)!}{(S!)^i}*(m-i)^{n-i*S}$
$f[i]=\sum\limits_{j=i}^{m}C_j^i*g[j]$
二项式反演得:$g[i]=\sum\limits_{j=i}^{m}(-1)^{j-i}*C_j^i*f[j]$
大力化式子:$g[i]=\frac{1}{i!}*\sum\limits_{j=0}^{m-i}\frac{(-1)^j}{j!}*f[j+i]*(j+i)!$
便是一个裸的卷积了,直接$NTT$即可
最后引用GXZlegend大佬的话来做结束语:
希望能对二项式反演有一个更深的理解