菜就多练,输不起就别玩,不会就是不会。
二项式推论
1. 1. ( n m ) = ( n n − m ) ( n m ) = ( n n − m )
2. 2. ( n m ) = n m ( n − 1 m − 1 ) ( n m ) = n m ( n − 1 m − 1 )
3. 3. n ∑ i = 0 C i n = 2 n ∑ i = 0 n C n i = 2 n
证明:拆 ( 1 + 1 ) n ( 1 + 1 ) n
4. 4. n ∑ i = 0 ( − 1 ) i C i n = 0 ∑ i = 0 n ( − 1 ) i C n i = 0
特殊的,n = 0 n = 0 ,上式等于 1 1 。
证明:拆 ( 1 − 1 ) n ( 1 − 1 ) n
这些是基础的,还有后面会说。
二项式反演
形式一
g ( n ) = n ∑ i = 0 ( − 1 ) i f ( i ) C i n ⇔ f ( n ) = n ∑ i = 0 ( − 1 ) i g ( i ) C i n g ( n ) = ∑ i = 0 n ( − 1 ) i f ( i ) C n i ⇔ f ( n ) = ∑ i = 0 n ( − 1 ) i g ( i ) C n i
证明:
考虑一个全集 U = { a 1 , a 2 , a 3 . . . a n } U = { a 1 , a 2 , a 3 . . . a n } 。
我们定义 f ( i ) f ( i ) 表示满足 i i 个条件的方案数(求什么方案看题目定)。
我们定义 g ( i ) g ( i ) 表示不满足 i i 个条件的方案数。
根据 f f 求 g g :g ( n ) = n ∑ i = 0 ( − 1 ) i f ( i ) C i n g ( n ) = ∑ i = 0 n ( − 1 ) i f ( i ) C n i
根据容斥原理,上式得证。
根据 g g 求 f f :f ( n ) = n ∑ i = 0 ( − 1 ) i g ( i ) C i n f ( n ) = ∑ i = 0 n ( − 1 ) i g ( i ) C n i
上式得证。
举个例子,我们要算满足条件 a 1 , a 2 , a 3 a 1 , a 2 , a 3 的,应该加上所有方案,减去不满足 a 1 a 1 或 a 2 a 2 或 a 3 a 3 的,加上不满足 a 1 , a 2 a 1 , a 2 或 a 1 , a 3 a 1 , a 3 或 a 2 , a 3 a 2 , a 3 的。再加上三次的。
然后同理可证另一个。
这个式子好像没什么用。
形式二
g n = n ∑ i = 0 C i n f i ⇔ f n = n ∑ i = 0 ( − 1 ) n − i C i n g i g n = ∑ i = 0 n C n i f i ⇔ f n = ∑ i = 0 n ( − 1 ) n − i C n i g i
我们来理解理解这个式子。
原理是这个:n ∑ i = 0 C i n = [ n = 0 ] ∑ i = 0 n C n i = [ n = 0 ]
f i f i 表示条件恰好 满足 i i 个的方案,g i g i 表示至多 满足 i i 个条件的方案。
换句话说,左边求的就是所有满足 n n 个条件即以内的情况。
我们追踪一部分变量来理解这个问题。
假设现在有 6 6 个条件 a 1 , a 2 , a 3 , a 4 , a 5 , a 6 a 1 , a 2 , a 3 , a 4 , a 5 , a 6 ,我们现在想把 3 3 个条件的给减掉。比如说 a 1 , a 2 , a 3 a 1 , a 2 , a 3 。
这个条件最终的贡献是 :C 3 3 − C 2 3 + C 1 3 − C 0 3 = 0 C 3 3 − C 3 2 + C 3 1 − C 3 0 = 0
那一个条件 a 1 a 1 呢?
贡献是 C 5 5 − C 4 5 + C 3 5 − C 2 5 + C 1 5 − C 0 5 = 0 C 5 5 − C 5 4 + C 5 3 − C 5 2 + C 5 1 − C 5 0 = 0
那六个条件呢?
我们知道 C 0 0 = 1 C 0 0 = 1 ,所以归纳一下,只剩下 f 6 f 6 了。
所以其实这就是一种特殊的容斥。
形式三
g n = m ∑ i = n C n i f i ⇔ f n = m ∑ i = n ( − 1 ) i − n C n i g i g n = ∑ i = n m C i n f i ⇔ f n = ∑ i = n m ( − 1 ) i − n C i n g i
其中 f i f i 表示恰好满足 i i 个条件方案数。
g i g i 表示钦定满足 i i 个条件方案数。
我们分析一下。
假设有 ( a 1 , a 2 , a 3 , a 4 ) ( a 1 , a 2 , a 3 , a 4 ) 我们算一下 f f 和 g g 。
我们算一下:
f 2 : f 2 :
{ a 1 , a 2 } , { a 2 , a 3 } , { a 3 , a 4 } , { a 1 , a 3 } , { a 1 , a 4 } , { a 2 , a 4 } { a 1 , a 2 } , { a 2 , a 3 } , { a 3 , a 4 } , { a 1 , a 3 } , { a 1 , a 4 } , { a 2 , a 4 }
g 2 : g 2 :
{ a 1 , a 2 } : { a 1 , a 2 } , { a 1 , a 2 , a 3 } , { a 1 , a 2 , a 4 } , { a 1 , a 2 , a 3 , a 4 } . . . { a 1 , a 2 } : { a 1 , a 2 } , { a 1 , a 2 , a 3 } , { a 1 , a 2 , a 4 } , { a 1 , a 2 , a 3 , a 4 } . . . 。
综上,我们得出通过 f f 求 g g 的公式:
g n = m ∑ i = n C n i f i g n = ∑ i = n m C i n f i
现在看看怎么用 g g 求 f f 。
我们跟踪一下 a 1 , a 2 , a 3 , a 4 a 1 , a 2 , a 3 , a 4 。
首先,在 i = 2 i = 2 时,我们加上贡献,它被加了 C 2 2 × C 2 4 C 2 2 × C 4 2 次。
然后,在 i = 3 i = 3 时,我们减去贡献,它被减了 C 2 3 × C 3 4 C 3 2 × C 4 3 次。
最后,在 i = 4 i = 4 时,我们加上贡献,它被加了 C 2 4 × C 4 4 C 4 2 × C 4 4 次。
我们发现它刚好等于 0 0 。
我们再跟踪一下 a 1 , a 2 , a 3 , a 4 , a 5 a 1 , a 2 , a 3 , a 4 , a 5
i = 2 : + C 2 2 × C 2 5 i = 2 : + C 2 2 × C 5 2
i = 3 : − C 2 3 × C 3 5 i = 3 : − C 3 2 × C 5 3
i = 4 : + C 2 4 × C 4 5 i = 4 : + C 4 2 × C 5 4
i = 5 : − C 2 5 × C 5 5 i = 5 : − C 5 2 × C 5 5
我们知道,C j i × C k j = C k i × C j − k i − j C i j × C j k = C i k × C i − j j − k
所以上式为 0 0 。
好了你已经学会二项式反演了,现在我们做做几个题。
错排问题
问题:有多少个长度为 n n 的排列 p p 满足 ∀ i , p i ≠ i ∀ i , p i ≠ i 。
我们知道恰好 n n 个位置 p i ≠ i p i ≠ i 非常难求。我们换个思路:至多 n n 个 p i ≠ i p i ≠ i ,怎么求?
我们设恰好为 f f ,至多为 g g 。
显然,我们知道 f f 很简单能求出 g g :g ( n ) = n ∑ i = 0 f ( i ) × C i n g ( n ) = ∑ i = 0 n f ( i ) × C n i
所以我们直接二项式反演。
我们看看怎么求至多 k k 个位置满足 p i ≠ i p i ≠ i 。
一眼顶针,不就是 ( k ) ! ( k ) ! 吗。
然后上反演即可。
第二类斯特林数
问题:把 n n 个不同的小球放入 m m 个不同的盒子里,要求每个盒子非空,有多少种放法?
我们定义 f i f i 表示恰好 i i 个格子为空,g i g i 表示钦定 i i 个格子为空。
那么我们能求出 f k = ( m − k ) n f k = ( m − k ) n 。直接反演即可。
总结: 形式一的g和形式二的g虽然都是恰好,但不太一样,形式一的g是恰好满足某几个特定的性质,而形式的g是恰好满足多少个性质的总和。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现