二项式系数
更完整的思考过程以及代数推理过程都可以看数学书,所以我尽量给每个式子都赋予组合意义。
因为在有足够强的代数推理能力之前,没有组合意义往往是困难的。
恒等式赋予组合意义往往都是左边右边分开找意义。
常见公式:
( n k ) = ( n n − k ) ( n k ) = ( n n − k )
左:
n n 个球选出
k k 的球的方案
右: n n 个球留下 n − k n − k 个球。
n ∑ k = 0 ( n k ) = 2 n ∑ k = 0 n ( n k ) = 2 n
n n 个球选出任意个球
左:枚举选了多少个球然后组合数。
右:每个球只有选或者不选两种状态,一共 2 n 2 n 个状态。
( n k ) = ( n − 1 k ) + ( n − 1 k − 1 ) ( n k ) = ( n − 1 k ) + ( n − 1 k − 1 )
n n 个球选 k k 个球
左:组合数。
右:分两种情况分块算,钦定第一个球不选以及钦定第一个数选方案数相加。
二项式定理:
( x + y ) n = n ∑ k = 0 ( n k ) x k y n − k ( x + y ) n = ∑ k = 0 n ( n k ) x k y n − k
牛顿二项式定理:( x , y , r ) ( x , y , r ) 可以不再是整数
( x + y ) r = ∑ k ( r k ) x k y r − k ( x + y ) r = ∑ k ( r k ) x k y r − k
交错和:
m ∑ k = 0 ( − 1 ) k ( n k ) = ( − 1 ) m ( n − 1 m ) ∑ k = 0 m ( − 1 ) k ( n k ) = ( − 1 ) m ( n − 1 m )
吸收公式:
k ( n k ) = n ( n − 1 k − 1 ) k ( n k ) = n ( n − 1 k − 1 )
计数二元组 ( S , x ) ( S , x ) 满足 S S 是 1 ∼ n 1 ∼ n 的子集且集合大小为 k k 且 x ∈ S x ∈ S 。
左:先枚举 S S 的大小,组合数枚举个数,一个 S S 的贡献是集合大小。
右:枚举 x x ,再枚举有多少个 S S 包括 x x 。
相伴恒等式:
( n − k ) ( n k ) = n ( n − 1 k ) ( n − k ) ( n k ) = n ( n − 1 k )
组合意义和上面类似,只是将 x x 的条件变为 x ∉ S x ∉ S 即可。
上指标求和:
n ∑ k = 0 ( k m ) = ( n + 1 m + 1 ) ∑ k = 0 n ( k m ) = ( n + 1 m + 1 )
n + 1 n + 1 个球选 m + 1 m + 1 个球。
左:枚举编号最大的球为 k + 1 k + 1 ,再组合数求方案数。
平行求和:
n ∑ k = 0 ( m + k k ) = ( n + m + 1 n ) ∑ k = 0 n ( m + k k ) = ( n + m + 1 n )
把 ( m + k k ) ( m + k k ) 换成 ( m + k m ) ( m + k m ) 跟上指标求和本质相同了。
上指标反转:
( n k ) = ( − 1 ) k ( k − n − 1 k ) ( n k ) = ( − 1 ) k ( k − n − 1 k )
范德蒙德卷积:
s ∑ k = 0 ( n k ) ( m s − k ) = ( n + m s ) ∑ k = 0 s ( n k ) ( m s − k ) = ( n + m s )
n + m n + m 个球选 s s 个球
左边:枚举前 n n 个球中选了 k k 个,后面 m m 个选出 s − k s − k 个球。
右边:直接组合数。
倒着的范德蒙德卷积:
n ∑ k = 0 ( k a ) ( n − k b ) = ( n + 1 a + b + 1 ) ∑ k = 0 n ( k a ) ( n − k b ) = ( n + 1 a + b + 1 )
n + 1 n + 1 个球选出 a + b + 1 a + b + 1 个球染成 a a 个红色 1 1 个绿色 b b 个蓝色,且红色都在最左边蓝色都在最右边。
左边:枚举绿色在哪里,左边组合数,右边组合数。
右边:直接选球然后再顺次染色。
n ∑ k = 0 k ( n k ) 2 = n ( 2 n − 1 n − 1 ) ∑ k = 0 n k ( n k ) 2 = n ( 2 n − 1 n − 1 )
组合意义:从 n n 个男生 n n 个女生中选取一共选取 n n 个男生和女生,再选出一个男生作为队长的方案数。
左边:枚举男生选 k k 个女生选 n − k n − k 个再从男生中选一个队长。
右边:枚举队长是谁再从剩下的人中选 n − 1 n − 1 个人。
生成函数:(具体内容见另一个文件)
往往设一个辅助变量 x x 能让我们更好的跟代数结合,使用一些高等的代数技巧。
n ∑ k = 1 k ( n k ) = n 2 n − 1 ( 1 + x ) n = n ∑ k = 0 ( n k ) x k ∑ k = 1 n k ( n k ) = n 2 n − 1 ( 1 + x ) n = ∑ k = 0 n ( n k ) x k
两边同时对 x x 求导:
n ( 1 + x ) n − 1 = n ∑ k = 1 k ( n k ) x k − 1 n ( 1 + x ) n − 1 = ∑ k = 1 n k ( n k ) x k − 1
将 x = 1 x = 1 带入上式可得到。
组合意义:计数二元组 ( S , x ) ( S , x ) 的二元组。
左边:枚举 S S ,那么每个集合可以带来集合大小这么多的贡献。
右边:枚举 x x ,再计算有多少个集合包含 x x 。
n ∑ k = 1 k 2 ( n k ) = n ( n + 1 ) 2 n − 2 ∑ k = 1 n k 2 ( n k ) = n ( n + 1 ) 2 n − 2
继续 1. 的推导:
n ( 1 + x ) n − 1 = n ∑ k = 1 k ( n k ) x k − 1 n x ( 1 + x ) n − 1 = n ∑ k = 1 k ( n k ) x k n ( 1 + x ) n − 1 = ∑ k = 1 n k ( n k ) x k − 1 n x ( 1 + x ) n − 1 = ∑ k = 1 n k ( n k ) x k
继续导!
n [ ( 1 + x ) n − 1 + ( n − 1 ) x ( 1 + x ) n − 2 ] = n ∑ k = 1 k 2 ( n k ) x k − 1 n [ ( 1 + x ) n − 1 + ( n − 1 ) x ( 1 + x ) n − 2 ] = ∑ k = 1 n k 2 ( n k ) x k − 1
将 x = 1 x = 1 带入即可得到等式。
组合意义:计数 ( S , x , y ) ( S , x , y ) 的三元组。
左边:先计算 x = y x = y 的数量,个数为 n 2 n − 1 n 2 n − 1 ,再计算 x ≠ y x ≠ y 的数量,个数为 n ( n − 1 ) 2 n − 2 n ( n − 1 ) 2 n − 2 ,相加即可得到答案。
右边:先枚举 S S 再枚举 x , y x , y 。
还能继续导吗?可以。
有能导的题,那么也就有能积的题。
n ∑ k = 0 ( n k ) ( − 1 ) k 1 k + 1 = 1 n + 1 ( x − 1 ) n = n ∑ k = 0 ( n k ) ( − 1 ) n − k x k ∑ k = 0 n ( n k ) ( − 1 ) k 1 k + 1 = 1 n + 1 ( x − 1 ) n = ∑ k = 0 n ( n k ) ( − 1 ) n − k x k
直接积分。
( x − 1 ) n + 1 n + 1 = n ∑ k = 0 ( n k ) ( − 1 ) n − k x k + 1 k + 1 + C ( x − 1 ) n + 1 n + 1 = ∑ k = 0 n ( n k ) ( − 1 ) n − k x k + 1 k + 1 + C
带入 x = 0 x = 0 得到 C = ( − 1 ) n + 1 n + 1 C = ( − 1 ) n + 1 n + 1 ,因此:
( x − 1 ) n + 1 − ( − 1 ) n + 1 n + 1 = n ∑ k = 0 ( n k ) ( − 1 ) n − k x k + 1 k + 1 ( x − 1 ) n + 1 − ( − 1 ) n + 1 n + 1 = ∑ k = 0 n ( n k ) ( − 1 ) n − k x k + 1 k + 1
带入 x = 1 x = 1 得到:
( − 1 ) n n + 1 = n ∑ k = 0 ( n k ) ( − 1 ) n − k 1 k + 1 ( − 1 ) n n + 1 = ∑ k = 0 n ( n k ) ( − 1 ) n − k 1 k + 1
所以:
n ∑ k = 0 ( n k ) ( − 1 ) k 1 k + 1 = 1 n + 1 ∑ k = 0 n ( n k ) ( − 1 ) k 1 k + 1 = 1 n + 1
组合意义?
我搞忘了是谁说的,式子中带 − 1 − 1 项胡组合意义难度是非常大的。
奇偶抵消:
n ∑ k = 0 ( − 1 ) k ( n k ) 2 = { 0 2 ∤ n ( − 1 ) m ( 2 m m ) n = 2 m ∑ k = 0 n ( − 1 ) k ( n k ) 2 = { 0 2 ∤ n ( − 1 ) m ( 2 m m ) n = 2 m
n n 是奇数,k k 项和 n − k n − k 项可以抵消。
n n 是偶数,注意到:
( 1 + x ) n = n ∑ k = 0 ( n k ) x k ( 1 − x ) n = n ∑ k = 0 ( n k ) ( − 1 ) k x k ( 1 + x ) n = ∑ k = 0 n ( n k ) x k ( 1 − x ) n = ∑ k = 0 n ( n k ) ( − 1 ) k x k
上下式对应相乘,得到 ( 1 − x 2 ) n ( 1 − x 2 ) n 取出 x n x n 项的系数可以得到:
n ∑ k = 0 ( n n − k ) ( − 1 ) k ( n k ) = n ∑ k = 0 ( − 1 ) k ( n k ) 2 ∑ k = 0 n ( n n − k ) ( − 1 ) k ( n k ) = ∑ k = 0 n ( − 1 ) k ( n k ) 2
通过二项式展开 ( 1 − x 2 ) n ( 1 − x 2 ) n 也就得到:
n ∑ k = 0 ( − 1 ) k ( n k ) 2 = ( − 1 ) m ( 2 m m ) ∑ k = 0 n ( − 1 ) k ( n k ) 2 = ( − 1 ) m ( 2 m m )
牛牛挑战:
n ∑ k = 0 ( n k ) 2 ( 3 n + k 2 n ) = ( 3 n n ) 2 ∑ k = 0 n ( n k ) 2 ( 3 n + k 2 n ) = ( 3 n n ) 2
讲一下化简的契机:注意到 3 n + k 3 n + k 是非常讨厌的,看能否把他拆开。
怎么办?逆向范德蒙德卷积!
= ∑ k ( n k ) 2 ∑ t ( 3 n 2 n − t ) ( k t ) = ∑ t ( 3 n 2 n − t ) ∑ k ( n k ) 2 ( k t ) = ∑ t ( 3 n 2 n − t ) ( n t ) ∑ k ( n k ) ( n − t n − k ) = ∑ t ( n t ) ( 3 n 2 n − t ) ( 2 n − t n ) = ( 3 n n ) ∑ t ( n t ) ( 2 n n − t ) = ( 3 n n ) 2 = ∑ k ( n k ) 2 ∑ t ( 3 n 2 n − t ) ( k t ) = ∑ t ( 3 n 2 n − t ) ∑ k ( n k ) 2 ( k t ) = ∑ t ( 3 n 2 n − t ) ( n t ) ∑ k ( n k ) ( n − t n − k ) = ∑ t ( n t ) ( 3 n 2 n − t ) ( 2 n − t n ) = ( 3 n n ) ∑ t ( n t ) ( 2 n n − t ) = ( 3 n n ) 2
第一步之后剩下的都其实是顺其自然的。
组合数前缀和
f ( n , m ) = m ∑ i = 0 ( n i ) = m ∑ i = 0 ( ( n − 1 i ) + ( n − 1 i − 1 ) ) = m ∑ i = 0 ( n − 1 i ) + m − 1 ∑ i = 0 ( n − 1 i ) = 2 m ∑ i = 0 ( n − 1 i ) − ( n − 1 m ) = 2 f ( n − 1 , m ) − ( n − 1 m ) f ( n , m ) = ∑ i = 0 m ( n i ) = ∑ i = 0 m ( ( n − 1 i ) + ( n − 1 i − 1 ) ) = ∑ i = 0 m ( n − 1 i ) + ∑ i = 0 m − 1 ( n − 1 i ) = 2 ∑ i = 0 m ( n − 1 i ) − ( n − 1 m ) = 2 f ( n − 1 , m ) − ( n − 1 m )
如果 q q 次查询 f ( n , m ) f ( n , m ) 的话,(q , n , m ≤ 5 × 10 5 q , n , m ≤ 5 × 10 5 ),我们通过上面的推导可以通过 O ( 1 ) O ( 1 ) 从 f ( n , m ) f ( n , m ) 得到 f ( n ± 1 , m ) f ( n ± 1 , m ) 和 f ( n , m ± 1 ) f ( n , m ± 1 ) ,套用莫队即可做到根号。
如果你全部手推一遍以上式子,恭喜你成功入门了!
其实还有很多组合数恒等式,大多本质相同,或者非常复杂(OI 中几乎无用),掌握基本公式即可。
来一点煎蛋题!
奇偶分类,设 m = ⌊ k 2 ⌋ m = ⌊ k 2 ⌋
k k 为偶数,那么 i i 和 k + 1 − i k + 1 − i 会配对,两者至多只能由一个会出现。
a n s = min ( n , m ) ∑ i = 1 ( m i ) ( n − 1 i − 1 ) × 2 i a n s = ∑ i = 1 min ( n , m ) ( m i ) ( n − 1 i − 1 ) × 2 i
具体而言,先枚举哪些对会出现,再插板求出方案数,以及每一对中选的是 i i 还是 k − i k − i 。
k k 为奇数的时候需要特殊讨论一下 m + 1 m + 1 的位置是否有值(至多只能选一个)
a n s = m i n ( n , m ) ∑ i = 1 ( m i ) ( n − 1 i − 1 ) × 2 i + m i n ( n − 1 , m ) ∑ i = 1 ( m i ) ( n − 2 i − 1 ) × 2 i a n s = ∑ i = 1 m i n ( n , m ) ( m i ) ( n − 1 i − 1 ) × 2 i + ∑ i = 1 m i n ( n − 1 , m ) ( m i ) ( n − 2 i − 1 ) × 2 i
需要特判一手 k = 1 k = 1 以及 n = 1 n = 1 。
怎么形式跟上道题这么像啊?设 m = ⌊ k + 1 2 ⌋ m = ⌊ k + 1 2 ⌋
容易发现如果不满足限制那么 a n − 1 + a n > k + 1 a n − 1 + a n > k + 1
对 a n a n 的取值分析。
如果 a n ≤ m a n ≤ m ,那么意味着一定满足限制,相当于只需要对满足第一个条件的数列计数,即为:(插板法)
m ∑ i = 1 ( n + i − 2 i − 1 ) ∑ i = 1 m ( n + i − 2 i − 1 )
否则,需要满足 a n − 1 ≤ k + 1 − a n a n − 1 ≤ k + 1 − a n ,其实也就等价于最后一位恰好为 k + 1 − a n k + 1 − a n 的方案数,直接插板即可。
整理可得:
a n s = ⌈ k 2 ⌉ ∑ i = 1 ( n + i − 2 i − 1 ) + ⌊ k 2 ⌋ ∑ i = 1 ( n + i − 2 i − 1 ) = ( n + ⌈ k 2 ⌉ − 1 n ) + ( n + ⌊ k 2 ⌋ − 1 n ) a n s = ∑ i = 1 ⌈ k 2 ⌉ ( n + i − 2 i − 1 ) + ∑ i = 1 ⌊ k 2 ⌋ ( n + i − 2 i − 1 ) = ( n + ⌈ k 2 ⌉ − 1 n ) + ( n + ⌊ k 2 ⌋ − 1 n )
考虑匹配的过程,设上一个匹配的位置为 i i ,那么匹配当前值 x x 一定是在 [ i + 1 , n ] [ i + 1 , n ] 中找到一个最小的 j j 使其匹配,那么 ( i , j ) ( i , j ) 中的值一定不能为 x x 。
不妨设匹配的位置分别为 p 1 , p 2 , p 3 ⋯ p n p 1 , p 2 , p 3 ⋯ p n
a n s = ∑ p 1 < p 2 < ⋯ < p n ( k − 1 ) p n − n k m − p n = m ∑ p n = n ( p n − 1 n − 1 ) ( k − 1 ) p n − n ( k − 1 + 1 ) m − p n = m ∑ i = n ( i − 1 n − 1 ) ( k − 1 ) i − n m − i ∑ t = 0 ( m − i t ) ( k − 1 ) m − i − t = ( k − 1 ) m m ∑ i = n ( i − 1 n − 1 ) m − i ∑ t = 0 ( m − i t ) 1 ( k − 1 ) n + t a n s = ∑ p 1 < p 2 < ⋯ < p n ( k − 1 ) p n − n k m − p n = ∑ p n = n m ( p n − 1 n − 1 ) ( k − 1 ) p n − n ( k − 1 + 1 ) m − p n = ∑ i = n m ( i − 1 n − 1 ) ( k − 1 ) i − n ∑ t = 0 m − i ( m − i t ) ( k − 1 ) m − i − t = ( k − 1 ) m ∑ i = n m ( i − 1 n − 1 ) ∑ t = 0 m − i ( m − i t ) 1 ( k − 1 ) n + t
定睛一看,组合意义随之而来:从 m m 个小球中选取至少 n n 个,没选一个会让方案数除以 k − 1 k − 1 。那么:
a n s = m ∑ i = n ( m i ) ( k − 1 ) m − i = k m − n − 1 ∑ i = 0 ( m i ) ( k − 1 ) m − i a n s = ∑ i = n m ( m i ) ( k − 1 ) m − i = k m − ∑ i = 0 n − 1 ( m i ) ( k − 1 ) m − i
m m 很大,不能直接预处理组合数,直接从 ( m i ) ( m i ) 递推到 ( m i + 1 ) ( m i + 1 ) 即可。
无解情况即为 1 1 的个数大于 0 0 的个数。
首先把题目钦定的首尾限制给搞了,具体而言:末尾 1 1 能出现在 ( m − 1 n − 1 ) ( m − 1 n − 1 ) 种不同的位置(插板),一开始的 0 0 只会对答案有 1 1 的贡献。
稍微转化一下,将 10 10 捆绑,转化一下现在有 n − 1 n − 1 对 10 10 ,m m 个 0 0 (让 m m 减去了 n n )
10 10 已经捆绑在一起,整体考虑,把它看作一个权值为 2 2 的单点。
考虑对于 trie 上的一个节点 0 0 ,如果上面有 i i 个 10 10 ,j j 个 0 0 ,上面可能组成的不同情况有 ( i + j j ) ( i + j j ) 种情况,每种情况对应一个满足条件的节点。
设
f ( x , y ) = x ∑ i = 0 y ∑ j = 0 ( i + j j ) f ( x , y ) = ∑ i = 0 x ∑ j = 0 y ( i + j j )
那么 0 0 造成的贡献即为 f ( n − 1 , m − 1 ) f ( n − 1 , m − 1 ) 。10 10 的贡献同理,只不过权值是 2 2 ,即为 2 f ( n − 2 , m ) 2 f ( n − 2 , m )
考虑化简 f ( x , y ) f ( x , y )
f ( x , y ) = x ∑ i = 0 y ∑ j = 0 ( i + j j ) = x ∑ i = 0 ( i + y + 1 y ) = − 1 + x + 1 ∑ i = 0 ( i + y y ) = ( x + y + 2 y + 1 ) − 1 f ( x , y ) = ∑ i = 0 x ∑ j = 0 y ( i + j j ) = ∑ i = 0 x ( i + y + 1 y ) = − 1 + ∑ i = 0 x + 1 ( i + y y ) = ( x + y + 2 y + 1 ) − 1
带入式子再结合上一开始处理的限制得到:
a n s = ( n + m + 1 n − 1 ) + 1 + f ( n − 1 , m − 1 ) + 2 f ( n − 2 , m ) = ( n + m + 1 n − 1 ) + ( n + m m ) + 2 ( n + m n − 1 ) − 2 a n s = ( n + m + 1 n − 1 ) + 1 + f ( n − 1 , m − 1 ) + 2 f ( n − 2 , m ) = ( n + m + 1 n − 1 ) + ( n + m m ) + 2 ( n + m n − 1 ) − 2
可以继续化简但是没必要,再套上一个卢卡斯即可。
首先无论如何一个排列至少一个贡献。
考虑将贡献拆到滑动窗口的滑动上,具体而言,如果向右滑动的之后最大值发生了变化,认为有一的贡献,最后再加上一开始的一个贡献即可。
注意到当窗口向右移动的时候,最大值可能发生变化当且仅当滑出去的值为最大值或者加入的值为当前最大值,分别设为条件一和条件二。
答案为满足条件一的所有贡献加上满足条件二的所有贡献再减去同时满足条件一以及条件二的贡献。
条件一:
S 1 = ( k − 1 ) ! ( n − k ) ! ( n − k ) n ∑ i = 1 ( i − 1 k − 1 ) S 1 = ( k − 1 ) ! ( n − k ) ! ( n − k ) ∑ i = 1 n ( i − 1 k − 1 )
具体意义为枚举最大值的值是多少,那么窗口内的所有数都得小于它,那么窗口内部(非最大值)以及窗口外部的值的具体位置并不在意,可以随便换,以及一共有 ( n − k ) ( n − k ) 个可以向右滑动的窗口(最右边的不能滑动了)
条件二:
S 2 = k ! ( n − k − 1 ) ! ( n − k ) n ∑ i = 1 ( i − 1 k ) S 2 = k ! ( n − k − 1 ) ! ( n − k ) ∑ i = 1 n ( i − 1 k )
唯一不同的点在于最大值在窗口的外面,其余同理。
同时满足条件一二:
S 3 = ( n − k − 1 ) ! ( k − 1 ) ! ( n − k ) n ∑ i = 1 ( i − 1 k − 1 ) ( n − i ) S 3 = ( n − k − 1 ) ! ( k − 1 ) ! ( n − k ) ∑ i = 1 n ( i − 1 k − 1 ) ( n − i )
前面都本质相同,最后的 ( n − i ) ( n − i ) 即为另外一个最大值可以选的位置。
a n s = S 1 + S 2 − S 3 + n ! = ( k − 1 ) ! ( n − k ) ! ( n − k ) n ∑ i = 1 ( i − 1 k − 1 ) + k ! ( n − k − 1 ) ! ( n − k ) n ∑ i = 1 ( i − 1 k ) − ( k − 1 ) ! ( n − k − 1 ) ! ( n − k ) n ∑ i = 1 ( i − 1 k − 1 ) ( n − i ) = ( n − k ) ! n ∑ i = 1 ( i − 1 ) ! ( i − k ) ! ( n − k ) + ( n − k ) ! n ∑ i = 1 ( i − 1 ) ! ( i − k ) ! ( i − k ) − ( n − k ) ! n ∑ i = 1 ( i − 1 ) ! ( i − k ) ! ( n − i ) + n ! = ( n − k ) ! n ∑ i = 1 ( i − 1 ) ! ( i − k ) ! ( 2 i − 2 k ) + n ! = 2 ( n − k ) ! n ∑ i = 1 ( i − 1 ) ! ( i − k − 1 ) ! + n ! = 2 ( n − k ) ! k ! n ∑ i = 1 ( i − 1 k ) + n ! = 2 ( n − k ) ! k ! ( n k + 1 ) + n ! = 2 ( n − k ) n ! k + 1 + n ! a n s = S 1 + S 2 − S 3 + n ! = ( k − 1 ) ! ( n − k ) ! ( n − k ) ∑ i = 1 n ( i − 1 k − 1 ) + k ! ( n − k − 1 ) ! ( n − k ) ∑ i = 1 n ( i − 1 k ) − ( k − 1 ) ! ( n − k − 1 ) ! ( n − k ) ∑ i = 1 n ( i − 1 k − 1 ) ( n − i ) = ( n − k ) ! ∑ i = 1 n ( i − 1 ) ! ( i − k ) ! ( n − k ) + ( n − k ) ! ∑ i = 1 n ( i − 1 ) ! ( i − k ) ! ( i − k ) − ( n − k ) ! ∑ i = 1 n ( i − 1 ) ! ( i − k ) ! ( n − i ) + n ! = ( n − k ) ! ∑ i = 1 n ( i − 1 ) ! ( i − k ) ! ( 2 i − 2 k ) + n ! = 2 ( n − k ) ! ∑ i = 1 n ( i − 1 ) ! ( i − k − 1 ) ! + n ! = 2 ( n − k ) ! k ! ∑ i = 1 n ( i − 1 k ) + n ! = 2 ( n − k ) ! k ! ( n k + 1 ) + n ! = 2 ( n − k ) n ! k + 1 + n !
最优解,取之!
首先注意到最最最讨厌的点在于,1 × 2 1 × 2 的矩形可以竖着放。
先考虑钦定它只能横着放,那么 2 × n 2 × n 的矩形用 k k 个矩形覆盖的方案数为:
a n s = k ∑ i = 0 ( n − 1 i − 1 ) × ( n − 1 k − i − 1 ) = ( 2 n − 2 k − 2 ) a n s = ∑ i = 0 k ( n − 1 i − 1 ) × ( n − 1 k − i − 1 ) = ( 2 n − 2 k − 2 )
具体而言,枚举第一行放多少个矩形,然后插板法算两行的答案再相乘,然后利用范德蒙德卷积化简。
然后考虑竖着的 1 × 2 1 × 2 的矩形,注意到 k k 很小,考虑枚举竖着的矩形有 j j 个,计算它把区域划分成 i i 块的方案数为,具体而言,最左边和最右边可以放也可以不放矩形,i i 块之间的地方一定要放矩形,直接插板可以得到:
( j − 1 + 2 i ) = ( j + 1 i ) ( j − 1 + 2 i ) = ( j + 1 i )
不妨设 a i , b i a i , b i 分别表示第 i i 块区域的列的数量,以及给这块区域分配的方案数,显然 ∀ i , a i , b i > 0 ∀ i , a i , b i > 0 ,这部分的答案:
a n s = ∑ ∑ a i = n − j , ∑ b i = k − j i ∏ w = 1 ( 2 a w − 2 b w − 2 ) a n s = ∑ ∑ a i = n − j , ∑ b i = k − j ∏ w = 1 i ( 2 a w − 2 b w − 2 )
观察组合意义:把 ∑ 2 a w − 2 ∑ 2 a w − 2 个位置中,选出所有 ∑ b w − 2 ∑ b w − 2 的所有方法,式子的意思为先枚举每个段选几个,再将方案相加,本质上就是所有位置中选取一些位置放东西的方案数。答案也就是:
( 2 n − 2 j − 2 i k − j − 2 i ) × ( n − j − 1 i − 1 ) ( 2 n − 2 j − 2 i k − j − 2 i ) × ( n − j − 1 i − 1 )
整合一下所有的部分得到:
注意一个小细节,我们没有考虑全部放竖板子的方案,因此还需要加上一个 [ n = k ] [ n = k ] 。
a n s = k ∑ i = 1 k ∑ j = i − 1 ( 2 n − 2 j − 2 i k − j − 2 i ) × ( j + 1 i ) × ( n − j − 1 i − 1 ) + [ n = k ] a n s = ∑ i = 1 k ∑ j = i − 1 k ( 2 n − 2 j − 2 i k − j − 2 i ) × ( j + 1 i ) × ( n − j − 1 i − 1 ) + [ n = k ]
设三人面前分别有 n 1 , n 2 , n 3 n 1 , n 2 , n 3 张牌。
那么:
重新刻画一手,每次轮到每个人的时候就将这个人的编号放到序列的最后(第一次的 a a 忽略),假设 a a 最后获胜的时候在序列的第 m m 位。一个长为 m m 的序列恰好对应着 3 n 1 + n 2 + n 3 − m 3 n 1 + n 2 + n 3 − m 个牌的情况,原因在于就每次下一轮执行操作的人是谁就在对应的操作者所取的卡片上写啥,前 m m 张牌都确定下来了,后面的 n 1 + n 2 + n 3 − m n 1 + n 2 + n 3 − m 的牌可以随便取。
a n s = n 2 + n 3 ∑ k = 0 3 n 2 + n 3 − k ( k + n 1 − 1 k ) k ∑ i = 0 [ i ≤ n 2 ] [ k − i ≤ n 3 ] ( k i ) a n s = ∑ k = 0 n 2 + n 3 3 n 2 + n 3 − k ( k + n 1 − 1 k ) ∑ i = 0 k [ i ≤ n 2 ] [ k − i ≤ n 3 ] ( k i )
枚举 a a 在第 k + n 1 k + n 1 回合获胜,那么第 k + n 1 k + n 1 回合回合一定为 1 1 ,且前面有恰好 k k 个不为 1 1 的数,后面的部分即为将 k k 个 1 1 具体划分为 2 2 还是 3 3 的方案数。
后面是一个组合数的部分求和,不太方便化简,考虑递推求解。
S ( k ) = k ∑ i = 0 [ i ≤ n 2 ] [ k − i ≤ n 3 ] ( k i ) = n 2 ∑ k − n 3 ( k i ) = n 2 ∑ k − n 3 ( k − 1 i ) + n 2 − 1 ∑ k − n 3 − 1 ( k − 1 i ) = 2 S ( k − 1 ) − ( k − 1 k − n 3 − 1 ) − ( k − 1 n 2 ) S ( k ) = ∑ i = 0 k [ i ≤ n 2 ] [ k − i ≤ n 3 ] ( k i ) = ∑ k − n 3 n 2 ( k i ) = ∑ k − n 3 n 2 ( k − 1 i ) + ∑ k − n 3 − 1 n 2 − 1 ( k − 1 i ) = 2 S ( k − 1 ) − ( k − 1 k − n 3 − 1 ) − ( k − 1 n 2 )
直接递推即可得到 S S ,再结合式子即可。
恭喜你入门了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具