小球与盒子

题目描述

前言

首先感谢 (wqy)(2018) 年初赛之前出这道题目来帮助我们提高组合数学的能力。 虽然我当时太菜,并没有去做

前置知识

组合数和排列数的公式以及原理和简单乘法原理,所以请提前百度。

要用到的公式:

[A_n^r=frac{n!}{(n-r)!} ]

[C_{n}^{m}=frac{n !}{m !(n-m) !} ]

需要注意的是,排列数与组合数的区别就是选出来的元素是否可以区分。

思路

比较简单的都是带 (C) 限制的,所以我们先看带 (C) 限制的。

LUC和UUC

观察 (LUC)(UUC) 因为盒子是没有区别的,所以一个球无论放在哪个盒子里都一样,所以只有两种情况, (n>m) 显然是 (0) ,否则就是 (1)

ULC

我们发现盒子是有标号的,而球是没有标号的,所以放在所有的球放的盒子不同结果肯定不一样,所以就是相当于给你 (m) 个盒子,让选 (n) 个放球,答案就是 (C_m^n)

LLC

我们可以发现现在球也有标号,就相当于再求组合数的时候要求选出来的也是有序的,这就是排列数,所以答案就是 (A_m^n)

LLA

再看一种比较简单的情况, (LLA) 的答案直接就是 (m^n) ,就相当于你第一个球有 (m) 种放法,第二个也是如此,一共有 (n) 个球,就是 (n)(m) 相乘,所以答案就是 (m^n)

还有几种用组合数学可以解决的情况。

ULB

盒子是有标号的,而且每一个盒子都要有一个球,所以可以用插板法,就是相当于在 (m) 个球的 (m-1) 个空隙里,加入 (n-1) 个板,分为 (n) 个集合。所以答案就是 (C_{n-1}^{m-1})

为什么 (ULB) 可以用插板法来解决呢??

首先,使用插板法,要插板的东西必须是没有区别的,因为插板法只能控制两个板中东西的数量,如果两个板中间的东西有标号的话,显然会算少。

但是如果选出来的集合再没有标号的话,也是错误的。

因为 ((1,2))((2,1)) 被当成两种情况去计算了,而如果选出来的集合再没有标号的话,这就是一种情况。

ULA

这个看起来和上面的 (ULB) 毫无关联,其实这个是可以转化为 (ULB) 的情况,可以先将每一个盒子都先放上一个球,然后就成了 (ULB) ,答案是 (C_{n+m-1}^{m-1})

下面的几种情况都是需要用 (DP) 来解决的。

前三个问题是用第二类斯特林数来解决的。

第二类斯特林数(简称为 (S_2))的定义为将 (n) 个物体划分成 (k) 个非空的没有区别的集合的方法数,大致就是把 (n) 个不同的小球放入 (m) 个相同的盒子中(且盒子不能为空)的方案数。递推公式为

(S_2[i][j]=S_2[i-1][j] * j+S_2[i-1][j-1])(S_2[i][j]) 表示将前 (i) 个小球放在前 (j) 个盒子里的方案数)

第一个转移是在前面的 (j) 个盒子里任意找一个盒子放上这个球,第二个转移是找一个新盒子来放这个球。

UUB

根据上面第二类斯特林数的定义,所以 (UUB) 就是 (S_2[n][m])

ULB

我们发现 (ULB) 只是将没有去区别的盒子变成了有区别的,所以我们只需要在 (S_2[n][m]) 的基础上乘上 (m!) 就可以了。就是相当于盒子有 (m!) 种放置方法,然后每种都有 (S_2[n][m]) 种可能性。

ULA

因为盒子在 (UUB) 的状态下是无序的,所以哪个盒子为空没有区别,我们直接枚举有几个盒子不放就可以了,答案就是

[sum_{i=1}^{m} S_2[n][i] ]

UUB

直接在 (ULB) 的基础上除一个 (m!) 是错误的。

我们考虑 (DP) ,设 (P[i][j]) 表示将 (i) 个球放在 (j) 个盒子里,所有盒子都不为空的方案数。

[P[i][j]=P[i-1][j-1]+P[i-j][j] ]

第一个转移表示新开一个盒子去放当前这个球,第二个表示在每一个盒子里都放上一个球。

其实这个有一个名字叫划分数,所以答案就是 (P[n][m])

UUA

这个也可以和上面 (ULB)(ULA) 一样,在每个盒子里先都先放上一个球,然后答案就是 (P[n+m][m])

原文地址:https://www.cnblogs.com/last-diary/p/11663228.html