标签:题目 转移 不为 解决 play 划分数 递推 第一个 https
首先感谢 \(wqy\) 在 \(2018\) 年初赛之前出这道题目来帮助我们提高组合数学的能力。 虽然我当时太菜,并没有去做
前置知识是组合数和排列数的公式以及原理和简单乘法原理,所以请提前百度。
要用到的公式:
\[A_n^r=\frac{n!}{(n-r)!}\]
\[C_{n}^{m}=\frac{n !}{m !(n-m) !}\]
需要注意的是,排列数与组合数的区别就是选出来的元素是否可以区分。
比较简单的都是带 \(C\) 限制的,所以我们先看带 \(C\) 限制的。
观察 \(LUC\) 和 \(UUC\) 因为盒子是没有区别的,所以一个球无论放在哪个盒子里都一样,所以只有两种情况, \(n>m\) 显然是 \(0\) ,否则就是 \(1\) 。
我们发现盒子是有标号的,而球是没有标号的,所以放在所有的球放的盒子不同结果肯定不一样,所以就是相当于给你 \(m\) 个盒子,让选 \(n\) 个放球,答案就是 \(C_m^n\) 。
我们可以发现现在球也有标号,就相当于再求组合数的时候要求选出来的也是有序的,这就是排列数,所以答案就是 \(A_n^m\) 。
再看一种比较简单的情况, \(LLA\) 的答案直接就是 \(m^n\) ,就相当于你第一个球有 \(m\) 种放法,第二个也是如此,一共有 \(n\) 个球,就是 \(n\) 个 \(m\) 相乘,所以答案就是 \(m^n\) 。
还有几种用组合数学可以解决的情况。
盒子是有标号的,而且每一个盒子都要有一个球,所以可以用插板法,就是相当于在 \(m\) 个球的 \(m-1\) 个空隙里,加入 \(n-1\) 个板,分为 \(n\) 个集合。所以答案就是 \(C_{n-1}^{m-1}\) 。
为什么 \(ULB\) 可以用插板法来解决呢??
首先,使用插板法,要插板的东西必须是没有区别的,因为插板法只能控制两个板中东西的数量,如果两个板中间的东西有标号的话,显然会算少。
但是如果选出来的集合再没有标号的话,也是错误的。
因为 \((1,2)\) 和 \((2,1)\) 被当成两种情况去计算了,而如果选出来的集合再没有标号的话,这就是一种情况。
这个看起来和上面的 \(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\) 就是 \(S_2[n][m]\) 。
我们发现 \(ULB\) 只是将没有去区别的盒子变成了有区别的,所以我们只需要在 \(S_2[n][m]\) 的基础上乘上 \(m!\) 就可以了。就是相当于盒子有 \(m!\) 种放置方法,然后每种都有 \(S_2[n][m]\) 种可能性。
因为盒子在 \(UUB\) 的状态下是无序的,所以哪个盒子为空没有区别,我们直接枚举有几个盒子不放就可以了,答案就是
\[\sum_{i=1}^{m} S_2[n][i]\]
直接在 \(ULB\) 的基础上除一个 \(m!\) 是错误的。
我们考虑 \(DP\) ,设 \(P[i][j]\) 表示将 \(i\) 个球放在 \(j\) 个盒子里,所有盒子都不为空的方案数。
\[P[i][j]=P[i-1][j-1]+P[i-j][j]\]
第一个转移表示新开一个盒子去放当前这个球,第二个表示在每一个盒子里都放上一个球。
其实这个有一个名字叫划分数,所以答案就是 \(P[n][m]\) 。
这个也可以和上面 \(ULB\) 转 \(ULA\) 一样,在每个盒子里先都先放上一个球,然后答案就是 \(P[n+m][m]\) 。
标签:题目 转移 不为 解决 play 划分数 递推 第一个 https
原文地址:https://www.cnblogs.com/last-diary/p/11663228.html