引入
二项式反演又名广义容斥定理
二项式反演可以表示成:
f[n]=∑i=0n(−1)iCnigi⟺gn=∑i=0n(−1)iCnif[i]f[n]=\sum_{i=0}^n(-1)^iC_{n}^{i}g_{i}⟺g_{n}=\sum_{i=0}^{n}(-1)^iC_{n}^{i}f[i]f[n]=∑i=0n(−1)iCnigi⟺gn=∑i=0n(−1)iCnif[i]
常用表达为:
f[n]=∑i=0nCnig[i]⟺g[n]=∑i=0n(−1)n−iCnif[i]f[n]=\sum_{i=0}^{n}C_{n}^ig[i]⟺g[n]=\sum_{i=0}^{n}(-1)^{n-i}C_{n}^if[i]f[n]=∑i=0nCnig[i]⟺g[n]=∑i=0n(−1)n−iCnif[i]
证明详见:二项式反演理解与证明
应用
恰好和至多的转换:
设f[i]f[i]f[i]表示恰好的方案数,g[i]g[i]g[i]表示至多的方案数,则有:g[n]=∑i=0nCni∗f[i]g[n]=\sum_{i=0}^nC_{n}^i*f[i]g[n]=∑i=0nCni∗f[i]
根据二项式反演有:
f[n]=∑i=0n(−1)n−i∗Cni∗gif[n]=\sum_{i=0}^n(-1)^{n-i}*C_{n}^i*g_if[n]=i=0∑n(−1)n−i∗Cni∗gi
gig_igi可以在很短的时间内求出,再用g求f就得到答案
恰好和至少的转换:
设f(i)表示恰好有i个的方案数,g(i)至少有i个的方案数f(i)表示恰好有i个的方案数,g(i)至少有i个的方案数f(i)表示恰好有i个的方案数,g(i)至少有i个的方案数
有式子:g(i)=∑x=inCxi∗f(x)g(i)=\sum_{x=i}^{n}C_{x}^i*f(x)g(i)=∑x=inCxi∗f(x)
根据二项式反演有:
f(i)=∑x=in(−1)x−i∗Cxi∗g(x)f(i)=\sum_{x=i}^n(-1)^{x-i}*C_{x}^i*g(x)f(i)=∑x=in(−1)x−i∗Cxi∗g(x)
球染色问题:n个球,k个颜色,求满足相邻颜色不同,每种颜色至少出现一次的方案数
解决方案:如果忽略每种颜色至少出现一次的限制,那么方案数就是k(k−1)n−1k(k-1)^{n-1}k(k−1)n−1,就是一次安排颜色,除了第一次k个随便放,之后每次都是只能选k-1个(因为要和上一个不同)
设fif_ifi表示恰好使用i种颜色的方案数。gkg_kgk表示n个球,用了k种颜色,不强制每种颜色必须出现的方案数。那么问题就是求fnf_nfn
先将函数fff与ggg建立联系
g[k]=k(k−1)n−1=∑i=0kCki∗f[i]g[k]=k(k-1)^{n-1}=\sum_{i=0}^kC_{k}^i*f[i]g[k]=k(k−1)n−1=i=0∑kCki∗f[i]
我们反演可得:
f[k]=∑i=0kCki∗g[i]f[k]=\sum_{i=0}^{k}C_{k}^{i}*g[i]f[k]=∑i=0kCki∗g[i]
f[k]=∑i=0kCki∗(−1)k−i∗g[i]f[k]=\sum_{i=0}^{k}C_{k}^i*(-1)^{k-i}*g[i]f[k]=∑i=0kCki∗(−1)k−i∗g[i]
例题:
hdu P1465:最不容易系列之一
luogu P4859 已经没有什么好害怕的了
[NOI Online #2 T3]游戏