小球放盒子 (组合数总结)

对于小球放盒子问题,可分为以下的八种情况。

(1、)盒子相同,球相同,不允许空。

  这个其实就相当于整数划分问题,就是把球看做数字,把盒子看做每一份。设(f[i][j])为考虑了前(i)个,分成了(j)份,转移方程为:

[f[i][j]=f[i-1][j-1]+f[i-j][j] ]

(2、)盒子相同,球相同,允许空。

  这个东西就是刚刚求的那个整数划分的前缀和。

(3、)盒子相同,球不同,不允许空。

  第二类斯特林数,设(f[i][j])表示处理了前(i)个球 ,用了(j)个盒子,转移方程为:

[f[i][j]=f[i-1][j-1]+f[i-1][j]*j ]

  这个东西的含义就是讨论当前新加入的球要放哪,第一种放法就是再开一个盒子:(f[i][j]+=f[i-1][j-1]),第二种方法就是在前面的(j)个盒子里随便挑一个放进去,因为有(j)个盒子,所以(f[i][j]+=f[i-1][j]*j)

(4、)盒子相同,球不同,允许空。

  第二类斯特林数的前缀和。其实就是看最后放了几个盒子,剩下的都是空的,加起来即可。

(5、)盒子不同,球相同,不允许空。

  比较经典的隔板法,把(m)盒子看做(m-1)个木板,然后要插入到(n-1)个空隙里,所以答案就是(large C_{n-1}^{m-1})

(6、)盒子不同,球相同,允许空。

  这个就是上一个的变形,可以添加(m)个小球放到这(m)个盒子里,这样就保证了盒子非空,答案就是(large C_{n+m-1}^{m-1})

(7、)盒子不同,球不同,不允许空。

  这个是第二类斯特林数(*m!),具体怎么证明不太会,好像就是把斯特林数换一种写法 ,然后消掉有序性。

(8、)盒子不同,球不同,允许空。

  对于每一个小球都可以放到(m)个盒子里,答案就是(m^n)

原文地址:https://www.cnblogs.com/sdfzsyq/p/9838857.html