二项式反演总结

总结一下见到的各种二项式反演的套路。

总的来说,二项式反演就是容斥。

只不过这个容斥有固定的套路,形式就那么几种,我把它们且分为两种形式:
1.直接不好算,但是至多好算。
2.直接不好算,但是至少好算。

至多好算:

f ( i ) f(i) f(i)表示恰好有 i i i个的方案数, g ( i ) g(i) g(i)表示至多有 i i i个的方案数。

f f f g g g满足:
g ( i ) = ∑ x = 0 i ( i x ) ∗ f ( x )    ( 1 ) g(i)=\sum_{x=0}^i \binom{i}{x}*f(x)~~(1) g(i)=x=0i(xi)f(x)  (1)

则:
f ( i ) = ∑ x = 0 i ( − 1 ) i − x ∗ ( i x ) ∗ g ( x )    ( 2 ) f(i)=\sum_{x=0}^i (-1)^{i-x}*\binom{i}{x}*g(x)~~(2) f(i)=x=0i(1)ix(xi)g(x)  (2)

证明:
( 1 ) (1) (1)式代入 ( 2 ) (2) (2)式,得:
f ( i ) = ∑ x = 0 i ( − 1 ) i − x ∗ ( i x ) ∗ ∑ j = 0 x ( x j ) ∗ f ( j ) f(i)=\sum_{x=0}^i (-1)^{i-x}*\binom{i}{x}*\sum_{j=0}^x \binom{x}{j}*f(j) f(i)=x=0i(1)ix(xi)j=0x(jx)f(j)
= ∑ j = 0 i f ( j ) ∗ ∑ x = j i ( − 1 ) i − x ∗ ( i x ) ∗ ( x j ) =\sum_{j=0}^i f(j)*\sum_{x=j}^i (-1)^{i-x}*\binom{i}{x}*\binom{x}{j} =j=0if(j)x=ji(1)ix(xi)(jx)
= ∑ j = 0 i f ( j ) ∗ ∑ x = 0 i − j ( − 1 ) i − ( x + j ) ∗ ( i x + j ) ∗ ( x + j j ) =\sum_{j=0}^i f(j)*\sum_{x=0}^{i-j} (-1)^{i-(x+j)}*\binom{i}{x+j}*\binom{x+j}{j} =j=0if(j)x=0ij(1)i(x+j)(x+ji)(jx+j)
= ∑ j = 0 i f ( j ) ∗ ∑ x = 0 i − j ( − 1 ) i − j − x ∗ ( i j ) ∗ ( i − j x ) =\sum_{j=0}^i f(j)*\sum_{x=0}^{i-j} (-1)^{i-j-x}*\binom{i}{j}*\binom{i-j}{x} =j=0if(j)x=0ij(1)ijx(ji)(xij)
= ∑ j = 0 i f ( j ) ∗ ( i j ) ∗ [ ( i − j ) = 0 ] =\sum_{j=0}^i f(j)*\binom{i}{j}*[(i-j)=0] =j=0if(j)(ji)[(ij)=0]
= f ( i ) =f(i) =f(i)
例题:
错排问题

至少好算:

f ( i ) f(i) f(i)表示恰好有 i i i个的方案数, g ( i ) g(i) g(i)表示至少有 i i i个的方案数。

g ( i ) = ∑ x = i n ( x i ) ∗ f ( x )   ( 3 ) g(i)=\sum_{x=i}^n \binom{x}{i}*f(x)~(3) g(i)=x=in(ix)f(x) (3)
f ( i ) = ∑ x = i n ( − 1 ) x − i ∗ ( x i ) ∗ g ( x )   ( 4 ) f(i)=\sum_{x=i}^n (-1)^{x-i}*\binom{x}{i}*g(x)~(4) f(i)=x=in(1)xi(ix)g(x) (4)

证明:
( 3 ) (3) (3)代入 ( 4 ) (4) (4)
f ( i ) = ∑ x = i n ( − 1 ) x − i ( x i ) ∗ ∑ j = x n ( j x ) f ( j ) f(i)=\sum_{x=i}^n(-1)^{x-i}\binom{x}{i}*\sum_{j=x}^n\binom{j}{x}f(j) f(i)=x=in(1)xi(ix)j=xn(xj)f(j)
= ∑ j = i n f ( j ) ∗ ∑ x = i j ( j x ) ∗ ( x i ) ∗ ( − 1 ) x − i =\sum_{j=i}^n f(j)*\sum_{x=i}^j\binom{j}{x}*\binom{x}{i}*(-1)^{x-i} =j=inf(j)x=ij(xj)(ix)(1)xi
= ∑ j = i n f ( j ) ∗ ∑ x = 0 j − i ( j x + i ) ∗ ( x + i i ) ∗ ( − 1 ) x =\sum_{j=i}^n f(j)*\sum_{x=0}^{j-i}\binom{j}{x+i}*\binom{x+i}{i}*(-1)^{x} =j=inf(j)x=0ji(x+ij)(ix+i)(1)x
= ∑ j = i n f ( j ) ∗ ∑ x = 0 j − i ( j i ) ∗ ( j − i x ) ∗ ( − 1 ) x =\sum_{j=i}^n f(j)*\sum_{x=0}^{j-i}\binom{j}{i}*\binom{j-i}{x}*(-1)^{x} =j=inf(j)x=0ji(ij)(xji)(1)x
= ∑ j = i n f ( j ) ∗ ( j − i x ) ∗ ∑ x = 0 j − i ( j i ) ∗ ( − 1 ) x =\sum_{j=i}^n f(j)*\binom{j-i}{x}*\sum_{x=0}^{j-i}\binom{j}{i}*(-1)^{x} =j=inf(j)(xji)x=0ji(ij)(1)x
= ∑ j = i n f ( j ) ∗ ( j − i x ) ∗ [ ( j − i ) = 0 ] =\sum_{j=i}^n f(j)*\binom{j-i}{x}*[(j-i)=0] =j=inf(j)(xji)[(ji)=0]
= f ( i ) =f(i) =f(i)

例题:
bzoj 3622 已经没有什么好害怕的了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值