本文所属分类
8类放球问题
放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。具体可以从3个维度,每个维度2种情况,共8种情况:
维度一:小球是否相同。
维度二: 盒子是否相同。
维度三: 是否容许盒子为空。
一,球相同,盒不同
隔板法: 球一字排开,用m-1个隔板隔开。
容许盒子为空
m-1个隔板。第一个隔板有n+1 个位置放,第二个隔板n+1+1个位置放 ⋯ \cdots ⋯。(n+1) × \times ×(n+2) ⋯ \cdots ⋯(n+m-1) 就是排列 P n + m − 1 m − 1 _{n+m-1}^{m-1} n+m−1m−1 由于不关心隔板的顺序。故是
故是:C n + m − 1 m − 1 _{n+m-1}^{m-1} n+m−1m−1
不容许盒子为空
m-1个隔板,每个隔板有n-1个位可以放。由于不能为空,所有两个隔板不能放到同一个位置,球的左右边缘也不能放隔板。从n-1位置选择m-1个隔板,故:C n − 1 m − 1 _{n-1}^{m-1} n−1m−1
二,球相同,盒相同
令 cnt[i]记录第i个盒子放的球数,由于球、盒子都相同。如果排序后cnt1和cnt2相同,则是同一种方案。为了避免重复,我们只枚举cnt按升序排序的方案。
容许盒子为空
如果 n < m,前面m-n个盒子一定为空,后面的n个盒子可能空,也可能非空。故f(n,m) = f(n,n)情况一 。
如果 n >= m,如果第一个盒为空则:f(n,m) = f(n,m-1) 情况二 ;如果第一个盒子不为空,所有盒子都必须放一i个球:则f(n,m) = f(n-m,m)情况三
当m等于1是,只有一个盒子,只能把所有球,全部放到一个盒子中。故 f(?,1) =1 。
当n为0时,所有盒子都为空。故 f(0,?) =1 。
三种情况,至少n或m减少,故一定会让 n <= 0或m <=1。
那会不会 n 没有变成0,直接变成负数?
只有情况三会让n减少 ,情况三的前提是 n >= m,故n的新值n-m必定大于等于0。
m不会在变成1之前,变成0或负数。
情况一: m= n,由于函数未提前结束,说名n > 0。故m也大于0。
情况二:函数未结束,说明m >1,故m-1 >=1。
总结:
f ( n , m ) = { 1 ( 0 = = n ) 或 ( 1 = = m ) f ( n , n ) n < m f ( n , m − 1 ) + f ( n − m , m ) o t h e r f(n,m)=\begin{cases}1 && (0==n)或(1==m)\\ f(n,n) && n < m \\ f(n,m-1)+ f(n-m,m) && other \\ \end{cases} f(n,m)=⎩ ⎨ ⎧1f(n,n)f(n,m−1)+f(n−m,m)(0==n)或(1==m)n<mother
不容许盒子为空
每个盒子放一个球,就变成容许为空。
g ( x ) = { 0 n < m f ( n − m , m ) o t h e r g(x)=\begin{cases} 0 && n < m \\ f(n-m,m) && other\\ \end{cases} g(x)={0f(n−m,m)n<mother
三,球不同,盒不同
容许盒子为空
每个球都有m个盒子可以放,不会重复。故f(n,m) = m^n^
不容许盒子为空
所有情况(总方案数): m^n^
至少一个空盒子的情况: C m 1 _{m}^{1} m1(m-1)^n^
至少两个空盒子的情况:C m 2 _{m}^{2} m2(m-2)^n^
⋮ \vdots ⋮
至少m-1个盒子的情况:C m m − 1 _{m}^{m-1} mm−1(m-(m-1))^n^
令f(i) = ( − 1 ) i + 1 C m i ( m − i ) n (-1)^{i+1}C_m^i(m-i)^n (−1)i+1Cmi(m−i)n
根据容斥原理,有空盒子不重复的方案数为:
∑ i : 1 m − 1 \sum_{i:1}^{m-1} ∑i:1m−1f(i) ,f(m)=0,故: ∑ i : 1 m − 1 \sum_{i:1}^{m-1} ∑i:1m−1f(i) 就是 ∑ i : 1 m \sum_{i:1}^{m} ∑i:1mf(i)
令 g(i) = -f(i) = ( − 1 ) i C m i ( m − i ) n (-1)^iC_m^i(m-i)^n (−1)iCmi(m−i)n
不包括空盒子的方案数为:
总方案数- 有空盒子的方案数= m^n^ + ∑ i : 1 m \sum_{i:1}^{m} ∑i:1mg(i) = (-1)^0^C m 0 m^0 m0(m-i)^n^ + ∑ i : 1 m \sum{i:1}^{m} ∑i:1mg(i) = ∑ i : 0 m \sum_{i:0}^{m} ∑i:0mg(i)
四,球不同,盒相同
不容许盒子为空
球不同盒不同(n,m) = m! × \times × 球不同盒相同(n,m)
m个不同的盒,共有m种不同的顺序,盒相同时,仅顺序不同是相同的。故扣除。
故结果为: 1 m ! \frac 1 {m!} m!1 ∑ i : 0 m \sum_{i:0}^{m} ∑i:0mg(i) 就是第二类斯特林数的通项公式S(n,m)。
容许盒子为空
分类讨论:
0 个空盒子: S(n,m)
1个空盒子: S(n,m-1)
⋮ \vdots ⋮
m-1个空盒子:S(n ,m-(m-1))
累加后: ∑ i : 1 m \sum_{i:1}^m ∑i:1mS(m,i) 可以理解为球实际放在1到m个盒子中。
题解:
似乎不是放球问题 | 【组合数学 放球问题】1621. 大小为 K 的不重叠线段的数目 |
球不同盒子相同,不能为空 | 【放球问题】920. 播放列表的数量 |
球同盒子不同能为空 | 【放球问题 乘法原理 唯一分解定理】1735. 生成乘积数组的方案数 |
球同盒子不同不能为空 | 【动态规划 组合数学 放球问题】2338. 统计理想数组的数目 |