码迷,mamicode.com
首页 > 其他好文 > 详细

小球与盒子

时间:2019-10-12 18:41:32      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:题目   转移   不为   解决   play   划分数   递推   第一个   https   

小球与盒子

技术图片

首先感谢 \(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_n^m\)

\(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]\)

小球与盒子

标签:题目   转移   不为   解决   play   划分数   递推   第一个   https   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!