十二类基本组合问题

小球入盒问题是所有组合问题的基础它计算的是形如 $n$ 个球放进 $m$ 个盒子的方案数 的一类问题在这类问题中一般存在三种限制

  • 小球是否有编号
  • 盒子是否有编号
  • 盒子中球的数量是无限制至少一个还是至多一个

记有编号为 $L\rm (labelled)$无编号为 $U\rm (unlabelled)$盒子中球的数量限制分别为 $A,B,C$这样我们就可以将一个问题用三个字母简记$\rm LUB$ 表示将 $n$ 个有标号小球放进 $m$ 个无标号盒子里每个盒子中至少有一个球的方案数

可以发现问题共有 $12$现在我们来一个个分析

Part1 LLA

$n$ 个有标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量没有限制的方案数

可以看作每次从 $m$ 个盒子里任选一个一共要放 $n$没有其他限制故方案数为

$$\boxed{m^n} $$

Part2 ULA

$n$ 个无标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量没有限制的方案数

在这个问题中我们只关心对每个盒子里面球的数量所以这个问题的方案数等于方程 $x_1+x_2+\cdots +x_m=n$ 非负整数解的数量用隔板法可以求得其为

$$\boxed{\dbinom{n+m-1}{m-1}} $$

Part3 ULB

$n$ 个无标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量至少为 $1$ 的方案数

这个问题与上个问题相似方案数等于方程 $x_1+x_2+\cdots +x_m=n$ 正整数解的数量用隔板法可以求得其为

$$\boxed{\dbinom{n-1}{m-1}} $$

Part4 LLC

$n$ 个有标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量至多为 $1$ 的方案数

我们发现这个问题等价于依次为每个球选择一个盒子故答案为

$$\boxed{m^{\underline{n}}} $$

Part5 ULC

$n$ 个无标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量至多为 $1$ 的方案数

相当于是为每一个盒子选择数量等价于从 $m$ 个盒子中选出 $n$让它的数量为 $1$故方案数为

$$\boxed{\dbinom{m}{n}} $$

Part6 LUC

$n$ 个有标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量至多为 $1$ 的方案数

盒子顺序可以任意交换所以任意一种方案都等价发现当球数超过盒子数时无解故方案数为

$$\boxed{[n\leqslant m]} $$

Part7 UUC

$n$ 个无标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量至多为 $1$ 的方案数

理由同上方案数为

$$\boxed{[n\leqslant m]} $$

Part8 LLB

$n$ 个有标号的球放进 $m$ 个有标号的盒子里每个盒子中球的数量至少为 $1$ 的方案数

考虑使用容斥原理枚举有多少个盒子为空剩下的盒子随便填故方案数为

$$\boxed{\sum_{i=0}^m(-1)^i\dbinom{m}{i}(m-i)^n} $$

利用 $\rm Part9$ 中讲到的第二类斯特林数也可以 $\rm LLB$ 问题的方案数表示为

$$\boxed{\begin{Bmatrix}n\\m\end{Bmatrix}m!} $$

Part9 LUB

$n$ 个有标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量至少为 $1$ 的方案数

只需要将 $m$ 个盒子排序产生的方案去除即可故方案数为 :

$$\boxed{\sum_{i=0}^m\frac{(-1)^i(m-i)^n}{i!(m-i)!}} $$

$\rm LUB$ 问题的答案被定义为 第二类斯特林数递推式如下

$$\boxed{\begin{Bmatrix}n\\m\end{Bmatrix}=m\begin{Bmatrix}n-1\\m\end{Bmatrix}+\begin{Bmatrix}n-1\\m-1\end{Bmatrix}} $$

其含义为考虑新加入一个有标号小球可以将其加入之前的任意一个盒子也可以为它单独开一个盒子方案数相加

Part10 LUA

$n$ 个有标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量无限制的方案数

$\rm LUA$ 问题的方案数为 $B_n$读作贝尔数因为若某个盒子为空可以看作没有这个盒子$B_n$ 表示将 $n$ 个数划分成任意个集合的方案数

$$\boxed{B_n=\sum_{i=1}^n\begin{Bmatrix}n\\i\end{Bmatrix}} $$

同时我们发现它也可以递推有递推式

$$\boxed{B_{n+1}=\sum_{i=0}^n\dbinom{n}{i}B_i} $$

其含义为第 $n+1$ 个数若和之前的 $i$ 个数放在一起方案数为 $\tbinom{n}{i}B_{n-i}$

Part11 UUA

$n$ 个无标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量无限制的方案数

我们发现其实这就是划分数求法如下

$f_{i,j}$ 表示将 $i$ 划分成不超过 $j$ 的数的方案数当计算 $f_{i,j}$其方案数可以从 $f_{i-j,j}$ 继承表示分出去一个大小为 $j$ 的数其方案数也可以从 $f_{i,j-1}$ 继承表示不选大小为 $j$ 的数故有转移方程

$$f_{i,j}=f_{i-j,j}+f_{i,j-1} $$

我们发现 $f$ 的转移就是一个完全背包所以考虑将其改写为一维形式

$$f_j=\sum_{i=1}^nf_{j-i} $$

$g_{i,j}$ 表示将 $i$ 划分成 $j$ 个数的方案当计算 $g_{i,j}$其方案数可以从 $g_{i-j,j}$ 继承表示将所有数 $+1$其方案数也可以从 $g_{i-1,j-1}$ 继承表示新增一个大小为 $1$ 的数我们发现后增加的数一定比前增加的数小所以不重这样一定能遍历到所有合法的划分所以不漏故有转移方程

$$g_{i,j}=g_{i-j,j}+g_{i-1,j-1} $$

这两种方式都可以做到 $\Theta(n^2)$

我们分析两种方式的优劣发现第一种算法主要依赖于划分成的数大小的上界第二种算法主要依赖于划分成数的数量于是考虑根号分治将问题看成一个完全背包物品按照占用空间小于等于 $\sqrt{n}$ 和大于 $\sqrt{n}$ 分类即可

同时由于 $g$ 计算的只有物品占用空间大于 $\sqrt{n}$ 的情况所以转移方程要改写成 :

$$g_{i,j}=g_{i-j,j}+g_{i-\sqrt{n},j-1} $$

每次加入一个 $\sqrt{n}$ 就可以保证所有数都大于 $\sqrt{n}$

最后统计答案的时候直接枚举 $i$然后将 $f_i$$g_{n-i,k}$ 乘起来即可

时间复杂度 $\Theta(n\sqrt{n})$

Part12 UUB

$n$ 个无标号的球放进 $m$ 个无标号的盒子里每个盒子中球的数量 至少为 $1$ 的方案数

我们发现只需要先在每个盒子中放 $1$ 个球就可以了等价于 $\rm UUA$ 问题中 $n-m$ 个球$m$ 个盒子的情况