盒子与小球

n个小球放入m个盒子问题

(1)球 相同 也可以 不同

(2)盒 相同 也可以 不同

(3)盒 为空 也可以 不空

合计2×2×2=8种模型。

1、球相同,盒不同,盒不空


相当于把n个相同小球分成m份,用插板法,在n个小球中间的n-1个空中,插入m-1个板子隔开。

答案为Cn1m1

2、球相同,盒不同,盒能空


在第1类情况下继续分析,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是第1种情,最后在从每个盒子里拿走1个小球。

答案为Cn+m1m1

3、球不同,盒相同,盒不空

题目链接:P2028 龙兄摘苹果

题目链接:P1655 小朋友的球


dp[n][m]表示n个不同小球放入m个相同盒子且盒不能为空的方案总数。

情况一:如果n<mdp[n][m]=0

情况二:如果n>=m则继续分析,由于小球不同故可以分步解决故考虑最后一个小球所放情况不同,共计两种情况。

(1)最后一个小球单独放入一个盒子,则前n-1个小球就放入m-1个盒子,方案总数为dp[n1][m1]

(2)最后一个小球与其他球放一起,因为球已经放入盒子,虽然盒子相同但球不同则选择放入的盒子也不同,故有m种放法。再考虑前n-1个小球放入m个盒子的方案 dp[n1][m] ,方案总数为 m×dp[n1][m]

边界条件 dp[n][m]=1(m=1,n1) 表示有球但只有1个盒子时,只有1种方案。

答案为 第二类斯特林数

dp[n][m]={0m>n1m=1,n1m×dp[n1][m]+dp[n1][m1]mn

为方便计算后面的问题,设第3类问题答案为 s[n][m]

4、球不同,盒相同,盒能空


选出1,2,……,n-1个盒子为空,视做不同方案,这样就和第3类问题相同。

B[n][m]表示n个不同小球放入m个相同盒子且盒能为空的方案总数。

答案为贝尔数:

B[n][m]=s[n][1]+s[n][m]++s[n][m]=i=1ms[n][i]

5、球不同,盒不同,盒不空

题目链接:P1287 盒子与球

我们可以用捆绑法将一些小球捆绑成一个小球,这道题可以等价为从n个小球中选出n−m+1个小球合并成一个大球,合并后为m-1个小球和1个大球共m个球,然后求m个球一共有多少种排列。

答案:Cnnm+1×Amm

6、球不同,盒不同,盒能空

从小球的角度考虑,n个小球都有m种选择,故答案为: mn

7、球相同,盒相同,盒能空

题目链接:P2386 放苹果

dp[n][m]表示n个相同小球放入m个相同盒子且盒能为空的方案总数。

若n<m 则 dp[n][m]=dp[n][n],因为盒子相同故,问题可以拿走m-n个盒子。

由于球相同,故不能对球进行分步考虑,考虑盒子是否存在空盒子的情况。

(1)盒子不为空,则可以将m个盒子中都先放一个小球,问题就转换为了n-m个小球放入m个盒子中的方案数,dp[n][m]=dp[n-m][m]。

(2)盒子存在空,可以拿走一个盒子作为空盒子,问题就转换为了n个小球放入m-1个盒子的方案数,dp[n][m]=d[n][m-1]。

边界条件为n=0或者m=1时,没有球或者只有1个盒子时都只有1种方案。

dp[n][m]={1m=1||n==0dp[n][n]n<mdp[nm][m]+dp[n][m1]mn

为方便后面使用设该方案数为 D[n][m]

8、球相同,盒相同,盒不空

题目链接:P1025 [NOIP2001 提高组] 数的划分

dp[n][m]表示n个相同小球放入m个相同盒子且盒不能为空的方案总数。

若 n<m 则 dp[n][m]=0 因为无法保证盒子不空

若 n>=m 可以将每个盒子中都放入一个小球,这样该问题就转换为第7类问题,允许为空的情况,dp[n][m]=D[nm][m]

dp[n][m]={0n<mD[nm][m]nm

Ps: 扩展题目

题目链接:P5824 十二重计数法

posted @   KuaiZz  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示