盒子与球系列

文章详细阐述了不同条件下的球放入盒中的组合问题,包括球相同盒不同、球相同盒相同、球不同盒相同等场景,涉及组合计数、动态规划和斯特林数等数学概念,讨论了无空盒和可空盒的情况,并给出了相应的解决方案和公式转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 球相同,盒不同,无空盒

因为球是相同的,所以我们只需要把球挨个放在一排进行选择就行了

在这里插入图片描述

我们发现,如果我们在某两个元素中间放一块板子来将其隔开:

在这里插入图片描述

这样一来,我们塞一个板子就可以得到 222 个集合,要有 mmm 个集合,就需要塞 m−1m-1m1 个板子 ,而在 nnn 的元素只有 n−1n-1n1 个空隙拿来塞板子,所以原问题转化为:求在 n−1n-1n1 个位置中塞 m−1m-1m1 个板子的组合数(因为盒子相同,所以是组合数),即 Cn−1m−1C_{n-1}^{m-1}Cn1m1

2. 球相同,盒不同,可空盒

基本思想与球相同,盒不同,无空盒情况相同,但是比较抽象:我们需要一种空球

就是这个样子:

在这里插入图片描述

假设有 mmm 个盒子,我们就再另外准备 mmm 个空球,这样,就可以出现空盒的情况(在一个盒子里只塞空球)。

这样一来,问题就成了:

n+mn+mn+m 个相同的球和 mmm 个不同的盒子,在无空盒的情况下,有几种放法?

问题就成了球相同,盒不同,无空盒,套公式,最终答案为 Cn+m−1m−1C_{n+m-1}^{m-1}Cn+m1m1

3. 球不同,盒相同,无空盒

对于这种问题,和第二类斯特林数有着很大的关系。因为第二类斯特林数就是求这种问题的方案总数

这里,我们采用dp来解决这一类问题

定义状态:

dp[i][j]表示前 iii 个球放入 jjj 个盒子的方案总数(这里注意一个细节:由于盒子是相同的,所以,定义状态的描述是放入j个盒子,而不是放入前j个盒子

先给状态转移方程式:

dp[ i ][ j ]=dp[ i−1 ][ j−1 ]+j×dp[ i−1 ][ j ]dp[\ i\ ][\ j\ ]=dp[\ i-1\ ][\ j-1\ ]+j\times dp[\ i-1\ ][\ j\ ]dp[ i ][ j ]=dp[ i1 ][ j1 ]+j×dp[ i1 ][ j ]

解释一下:

假设我们当前要放入 iii 号球,那么,有两种放入方法

  1. 这个球单独占了一个盒子
  2. 这个球与前 i−1i-1i1 个球共占 jjj 个盒子

对于情况 111,其对应的结果就是dp[i-1][j-1]

对于情况 222,其对应的结果就是j*dp[i-1][j]

为什么要*j呢?由于球是不相同的,而且有 jjj 个盒子可供选择,所以,根据乘法原理,我们需要*j

最终答案存储在dp[n][m]

4. 球不同,盒相同,可空盒

球不同,盒相同,无空盒基本类似,但是,由于可空盒,这就意味着,无论你是放 111 个盒子还是 222 个盒子,都是合法的,所以,在 球不同,盒相同,无空盒的dp基础上,最终答案为:∑i=1mdp[ n ][ i ]\sum\limits_{i=1}^mdp[\ n\ ][\ i\ ]i=1mdp[ n ][ i ]

5. 球不同,盒不同,无空盒

我们来回忆一下球不同,盒相同,无空盒的情况

思考:如果我们先把小球放进盒子之后,在对盒子进行一个全排列的排序,那么,在盒相同的情况下,这样是没有意义的,因为这样的到的答案本质上是相同的,但是,在盒不同的情况下,这样得到的答案本质上是不同的(因为盒子排序的过程就相当于把盒子内的小球进行集体迁移,由于盒不同,所以得到的方法必然是不同的)

那么,在 球不同,盒相同,无空盒的dp基础上,最终答案为:dp[n][m]*(m!)

6. 球不同,盒不同,可空盒

这东西就是一个㵘淼沝水

由于球和盒子都是不同的,还允许空盒,所以,直接一个乘法原理,就得到了答案:mnm^nmn

7. 球相同,盒相同,无空盒

由于盒相同,所以,我们就假设左边的盒子里的球一定小于等于右边盒子里的球

就是这样:

在这里插入图片描述

考虑dp

定义状态:

dp[n][m]表示将 nnn 个球放入 mmm 个盒子里的方案总数

由于不能有空盒存在,所以,我们可以先给每一个盒子放一个球

此时,我们还剩下 n−mn-mnm 个球

剩下的球我们只能放在前 i(1≤i≤m)i(1\le i\le m)i(1im) 个盒子里(为了保证先前的假设成立),相当于dp[n-m][i]

综上,得到了状态转移方程式:

dp[ i ][ j ]=∑k=1jdp[ i−j ][ k ]dp[\ i\ ][\ j\ ]=\sum\limits_{k=1}^jdp[\ i-j\ ][\ k\ ]dp[ i ][ j ]=k=1jdp[ ij ][ k ]

边界比较复杂:

dp[ i ][ j ]={1j=1 or⁡ i=j0i<jdp[\ i\ ][\ j\ ]=\begin{cases}1&j=1\ \operatorname{or}\ i=j\\0&i<j\end{cases}dp[ i ][ j ]={10j=1 or i=ji<j

最终答案为dp[n][m]

8. 球相同,盒相同,可空盒

球相同,盒相同,无空盒的情况类似,但是,需要借鉴一下球相同,盒不同,可空盒的空球思想

我们在另外准备 mmm 个空球,和原有的 nnn 个球放在一起

这样,问题就变成了球相同,盒相同,无空盒,在原dp基础上,最终答案为dp[n+m][m]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值