本文所属分类

组合数学汇总

8类放球问题

放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。具体可以从3个维度,每个维度2种情况,共8种情况:
维度一:小球是否相同。
维度二: 盒子是否相同。
维度三: 是否容许盒子为空。

一,球相同,盒不同

隔板法: 球一字排开,用m-1个隔板隔开。

容许盒子为空

m-1个隔板。第一个隔板有n+1 个位置放,第二个隔板n+1+1个位置放 【组合数学 隔板法 容斥原理】放球问题_隔板法。(n+1)【组合数学 隔板法 容斥原理】放球问题_隔板法_02(n+2)【组合数学 隔板法 容斥原理】放球问题_隔板法(n+m-1) 就是排列 P【组合数学 隔板法 容斥原理】放球问题_容斥原理_04 由于不关心隔板的顺序。故是
故是:C【组合数学 隔板法 容斥原理】放球问题_容斥原理_04

不容许盒子为空

m-1个隔板,每个隔板有n-1个位可以放。由于不能为空,所有两个隔板不能放到同一个位置,球的左右边缘也不能放隔板。从n-1位置选择m-1个隔板,故:C【组合数学 隔板法 容斥原理】放球问题_C++_06

二,球相同,盒相同

令 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。
总结:
【组合数学 隔板法 容斥原理】放球问题_算法_07

不容许盒子为空

每个盒子放一个球,就变成容许为空。
【组合数学 隔板法 容斥原理】放球问题_容斥原理_08

三,球不同,盒不同

容许盒子为空

每个球都有m个盒子可以放,不会重复。故f(n,m) = mn

不容许盒子为空

所有情况(总方案数): mn
至少一个空盒子的情况: C【组合数学 隔板法 容斥原理】放球问题_C++_09(m-1)n
至少两个空盒子的情况:C【组合数学 隔板法 容斥原理】放球问题_组合数学_10(m-2)n
【组合数学 隔板法 容斥原理】放球问题_容斥原理_11
至少m-1个盒子的情况:C【组合数学 隔板法 容斥原理】放球问题_隔板法_12(m-(m-1))n
令f(i) = 【组合数学 隔板法 容斥原理】放球问题_组合数学_13
根据容斥原理,有空盒子不重复的方案数为:
【组合数学 隔板法 容斥原理】放球问题_C++_14f(i) ,f(m)=0,故: 【组合数学 隔板法 容斥原理】放球问题_C++_14f(i) 就是 【组合数学 隔板法 容斥原理】放球问题_隔板法_16f(i)
令 g(i) = -f(i) = 【组合数学 隔板法 容斥原理】放球问题_容斥原理_17

不包括空盒子的方案数为:
总方案数- 有空盒子的方案数= mn + 【组合数学 隔板法 容斥原理】放球问题_隔板法_16g(i) = (-1)0C【组合数学 隔板法 容斥原理】放球问题_容斥原理_19(m-i)n + 【组合数学 隔板法 容斥原理】放球问题_隔板法_16g(i) = 【组合数学 隔板法 容斥原理】放球问题_组合数学_21g(i)

四,球不同,盒相同

不容许盒子为空

球不同盒不同(n,m) = m! 【组合数学 隔板法 容斥原理】放球问题_隔板法_02 球不同盒相同(n,m)
m个不同的盒,共有m种不同的顺序,盒相同时,仅顺序不同是相同的。故扣除。
故结果为:【组合数学 隔板法 容斥原理】放球问题_算法_23 【组合数学 隔板法 容斥原理】放球问题_组合数学_21g(i) 就是第二类斯特林数的通项公式S(n,m)。

容许盒子为空

分类讨论:
0 个空盒子: S(n,m)
1个空盒子: S(n,m-1)
【组合数学 隔板法 容斥原理】放球问题_容斥原理_11
m-1个空盒子:S(n ,m-(m-1))
累加后:【组合数学 隔板法 容斥原理】放球问题_C++_26S(m,i) 可以理解为球实际放在1到m个盒子中。

题解:

似乎不是放球问题

【组合数学 放球问题】1621. 大小为 K 的不重叠线段的数目

球不同盒子相同,不能为空

【放球问题】920. 播放列表的数量

球同盒子不同能为空

【放球问题 乘法原理 唯一分解定理】1735. 生成乘积数组的方案数

球同盒子不同不能为空

【动态规划 组合数学 放球问题】2338. 统计理想数组的数目