适合初赛宝宝和组合数学萌新体质,不会做就大力递推的十二重计数法!

紪絽

2024-08-29 19:20:32

Algo. & Theory

复赛完了再写这篇文章是不是太迟了?

闲话:我只是为了初赛练练组合数学而做的,没有多少 OI 内容(可能复赛时会考虑添加? 复赛寄的太彻底,不加了)。

我们教练说:初赛时排列组合的题目不会做就大力递推。虽然 CSP 初赛中数学题目越来越简单了,但这并不妨碍我仍然害怕着排练组合的题目。于是他让我来做这道题,并不是码,而是把递推式列出来。这方法确实很有用——于是我就写了这篇文章。

这篇文章是为我自己而写,也是为不会组合数学的人写的。所以很多理所当然的过程都写了上去,请多包含。

另附一些符号约定:

符号 意义
\displaystyle \bigcup\limits_{i=1}^n A_i 集合 A_1, A_2, \dots, A_n 的并集,\displaystyle \bigcup\limits_{i=1}^n A_i=A_1\cup A_2\cup \dots \cup A_n
\displaystyle \bigcap\limits_{i=1}^n A_i 集合 A_1, A_2, \dots, A_n 的交集,\displaystyle \bigcap\limits_{i=1}^n A_i=A_1\cap A_2\cap \dots \cap A_n
\dbinom{n}{k} \mathrm C^k_n
n^{\underline {k}} 下降阶乘幂,n^{\underline{k}}=\dfrac{n!}{(n-k)!} =\mathrm A^k_n
\Z^{n}_{>0} \left \{ x \in \Z ~\vert~ 0 < x \leq n \right \}

P5824 十二重计数法

n 个球和 m 个盒子,要全部装进盒子里。
还有一些限制条件,那么有多少种方法放球?(与放的先后顺序无关)

限制条件分别如下:

$\text{II}$:球之间互不相同,盒子之间互不相同,每个盒子至多装一个球。 $\text{III}$:球之间互不相同,盒子之间互不相同,每个盒子至少装一个球。 $\text{IV}$:球之间互不相同,盒子全部相同。 $\text{V}$:球之间互不相同,盒子全部相同,每个盒子至多装一个球。 $\text{VI}$:球之间互不相同,盒子全部相同,每个盒子至少装一个球。 $\text{VII}$:球全部相同,盒子之间互不相同。 $\text{VIII}$:球全部相同,盒子之间互不相同,每个盒子至多装一个球。 $\text{IX}$:球全部相同,盒子之间互不相同,每个盒子至少装一个球。 $\text{X}$:球全部相同,盒子全部相同。 $\text{XI}$:球全部相同,盒子全部相同,每个盒子至多装一个球。 $\text{XII}$:球全部相同,盒子全部相同,每个盒子至少装一个球。 ----- 想法 ----- # $\text{I}

每个球都有 m 种方案数。答案即为

m^n

\text{II}

依次取球放进盒子,每次放球后方案数都会少一种,乘起来答案为

m^{\underline {n}}

\text{III}

可以考虑先参考 \text{VI}
那么考虑盒子的排列,一种很显然的答案就是

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

当然了,我们也可以考虑容斥:枚举空着的盒子的个数,不限制放置个数的方案总数 减去 有 i 个盒子空着时方案的总数 即为我们求的答案。
设全集 U 是所有放球的方法构成的集合(容易注意到 |U| = m^n),A_i 为能满足 i 个盒子为空的放法构成的集合。即求 |U| - \left|\bigcup_{i=1}^{m}A_i\right|。 容斥得

\left|\bigcup_{i=1}^{m}A_i\right| &= \sum_{K \subseteq \Z^{n}_{>0}}(-1)^{|K|-1}\left|\bigcap_{k \in K} A_k\right| \\ &= \sum_{i=1}^m (-1)^{i-1}\dbinom{m}{i}(m-i)^n \end{aligned}

前面的系数 (-1)^{i-1} 可以归纳证明。\dbinom{m}{i} 表示选 i 个作为空盒子,(m-i)^n 的情景和 \text I 相同。

所以答案就是

\begin{aligned} |U| - \left|\bigcup_{i=1}^{m}A_i\right| &= m^n - \sum_{i=1}^m (-1)^{i-1}\dbinom{m}{i}(m-i)^n \\ &= m^n + \sum_{i=1}^m (-1)^{i}\dbinom{m}{i}(m-i)^n\\ &= \sum_{i=0}^m (-1)^{i}\dbinom{m}{i}(m-i)^n \end{aligned}

这个时候我们可以再次回看 \text{VI}

\text{IV}

先参考 \text{VI}
\text{VI} 不同的是没有了个数的限制。枚举非空盒子个数,所以是

\sum_{i = 1}^{m} \begin{Bmatrix} n \\ i \end{Bmatrix}

\text{V}

最简单的一集!由于盒子相同且最多放一个球,无论怎么装,都可以交换盒子顺序额得到同一种方案,所以答案为:

[n \le m]

顺带去看看 \text{XI}

\text{VI}

我会递推!
f_{\text {VI}}(n, m)n 个球,m 个盒子的方案数。
考虑新加进来一个球:

\begin{Bmatrix} n \\ m \end{Bmatrix} = \frac{1}{m!}\sum_{i=0}^m (-1)^{i}\binom{m}{i}(m-i)^n

非常神奇呢。

\text{VII}

我会递推!
f_{\text {VII}}(n, m)n 个球,m 个盒子的方案数。 考虑这一个球 不放而让新开的盒子空着 还是 在之前的盒子里放多个

所以递推式为:

f_{\text {VII}}(n, m) = f_{\text {VII}}(n - 1, m) + f_{\text {VII}}(n, m - 1)

也可以从插板的角度考虑:

先往每个盒子里塞一个球,最后把这个球拿走就行了。换言之,先求「将 n+m 个相同小球,放入到 m 个不同盒子,盒子至少装一球」的方案数,对于每个这个问题的划分方案,将每个盒子抽掉一个球,就是 \mathrm{VII} 的方案。因此该问答案即为

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

引用自 囧仙

\text{VIII}

我会递推!
f_{\text {VIII}}(n, m)n 个球,m 个盒子的方案数。 考虑这一个球 再开一个盒子放一个 还是 不放而让新开的盒子空着

所以递推式为:

f_{\text {VIII}}(n, m) = f_{\text {VIII}}(n - 1, m - 1) + f_{\text {VIII}}(n, m - 1)

实际上,这就是 组合数 \dbinom{n}{m}
也可以直接考虑选 m 个盒子装球,那答案也是一样的。

\text{IX}

我会递推!
f_{\text {IX}}(n, m)n 个球,m 个盒子的方案数。 考虑这一个球 再开一个盒子放一个 还是 在之前的盒子里放多个

所以递推式为:

f_{\text {IX}}(n, m) = f_{\text {IX}}(n - 1, m - 1) + f_{\text {IX}}(n - 1, m)

也可以从插板的角度考虑,是最平凡的插板法。答案为

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

\text{X}

我会递推!
f_{\text {X}}(n, m)n 个球,m 个盒子的方案数。可以发现,在所谓「第一个盒子里装一个球、第三个盒子里装三个球」是和「第一个盒子里装三个球、第三个盒子里装一个球」无异的。一种比较讨巧的做法是这样的:将盒子按照球的数量从小到大排序。这样的话,两种方案相同,仅当两种方案排序后的序列相同。所以可以:

可以证明以上的转移方案是正确的。所以递推式为:

f_{\text{X}}(n, m) = f_{\text {X}}(n, m - 1) + f_{\text {X}}(n - m, m)

这个东西其实就是 划分数。

\text{XI}

最简单的一集!

[n \le m]

\text{XII}

\text{X} 的唯一差别是每个盒子里都至少要一个球——那就先往盒子里都放一个球就好了。答案就是

f_{\text {X}}(n - m, m)