当球遇上盒子
现在我们开始进入著名的盒子与球问题,来练一练你的排列组合能力。
- 1.现在有 rrr 个互不相同的盒子和 nnn 个相同的球,要将这 nnn 个球放入 rrr 个盒子中,且不允许有空盒子,问有多少种放法?
我们考虑插板法,可以看成将一个不同的序列分成 rrr 段,则我们需要 r−1r-1r−1 个板子,并且供板子插的位置有 n−1n-1n−1 个,我们可以得到最终方案为 cn−1r−1c_{n-1}^{r-1}cn−1r−1。
- 2.现在有 rrr 个互不相同的盒子和 nnn 个相同的球,要将这 nnn 个球放入 rrr 个盒子中,且允许有空盒子,问有多少种放法?
可以发现,此题与上题的不同之处在于它允许有空盒子。所以,我们可以把这 rrr 个板子当做空球放进去,即只装一个样,而非真正的球。则此时,我们在用 r−1r-1r−1 个板子去插,便包含了空盒子的情况。最终方案数:Cn+r−1r−1C_{n+r-1}^{r-1}Cn+r−1r−1。
- 3.现在有 rrr 个相同的盒子和 nnn 个互不相同的球,要将这 nnn 个球放入 rrr 个盒子中,且不允许有空盒子,问有多少种放法?
此时,我们考虑递推。
我们定义 dpijdp_{ij}dpij 对应题意,并且这一类神奇的递推又被称作第二类斯特林数。
假设你现在正在放第 iii 个球,有两种情况:单独拿一个盒子装或者随便挑一个盒子放进去。
对于第一种,答案为 dpi−1,j−1dp_{i-1,j-1}dpi−1,j−1。
对于第二种,答案为 j×dpi−1,jj \times dp_{i-1,j}j×dpi−1,j。
所以 dpi,j=dpi−1,j−1+j×dpi−1,jdp_{i,j} = dp_{i-1,j-1}+j \times dp_{i-1,j}dpi,j=dpi−1,j−1+j×dpi−1,j
特殊情况:只有一个盒子时答案为 111,球数小于盒子数时答案为 000。
- 4.现在有 rrr 个相同的盒子和 nnn 个互不相同的球,要将这 nnn 个球放入 rrr 个盒子中,且允许有空盒子,问有多少种放法?
此题跟上题相像,只不过允许了空盒子。我们直接枚举最后有多少个空盒子即可。
最终方案:∑i=1ndpn,i\sum\limits_{i=1}^n dp_{n,i}i=1∑ndpn,i
- 5.现在有 rrr 个互不相同的盒子和 nnn 个互不相同的球,要将这 nnn 个球放入 rrr 个盒子中,且不允许有空盒子,问有多少种放法?
读完题目,发现与第三题仍然很像,只不过盒子从相同变成了不同,所以我们直接在最后乘上 mmm 个盒子的排列即可。
最终方案数:m!×dpn,rm!\times dp_{n,r}m!×dpn,r。
- 6.现在有 rrr 个互不相同的盒子和 nnn 个互不相同的球,要将这 nnn 个球放入 rrr 个盒子中,且允许有空盒子,问有多少种放法?
我们可以这样看这个问题:对于每一个球,我们都有 rrr 个盒子留给它放,所以最终答案:rnr^nrn。
- 7.把 nnn 个同样的小球放入 mmm 个同样的盒子中,不允许有的盒子空着不放,有多少种不同的放法?
我们再次考虑递推。
我们定义dpi,jdp_{i,j}dpi,j 表示将 iii 个小球放入 jjj 个盒子里…(此处省略。)
为了保证没有空盒,我们先往每一个盒子里放一个球。
剩下的我们想第四题一样思考,枚举使用盒子数量。
答案为 ∑i=1ndpn−m,i\sum\limits_{i=1}^{n} dp_{n-m,i}i=1∑ndpn−m,i。
特殊情况:当只有一个盒子或球数等于盒子数时,答案为 111;当球数小于盒子数时,答案为 000。
- 8.现在有 rrr 个相同的盒子和 nnn 个相同的球,要将这 nnn 个球放入 rrr 个盒子中,且允许有空盒子,问有多少种放法?
我们以第二题和第七题的思路进行思考
考虑转化:先借 mmm 个球铺满每个盒子,求完答案后再把球还回去。
最终答案为 dpn+m,ndp_{n+m,n}dpn+m,n