同色不相邻的方案数求解
引例:
有\(n\)种颜色的小球,
每种颜色的小球有\(a_i\)个,即一共有\(\sum_{i=1}^n a_i\)个小球。
现在要求把这些小球排同色不相邻的方案数求解成一行,要求同种颜色的小球不相邻。
求方案数,答案对\(10^9+7\)取模。 提交网址:web
前言
下面的算法都只考虑 同色小球之间无区别 的方案数。
即可重排列的情况。
如果同色小球之间有区别,为不重排列,那么对应乘上 \(\prod (a_i!)\) 即可。
方法1:动态规划
解法
从前往后枚举每种颜色的小球。
设\(f_{i,j}\)表示考虑完前\(i\)种小球,存在\(j\)个违法相邻的方案数。
转移首先考虑将\(a_i\)个小球分为\(k\)段,一共\(\binom{a_i-1}{k-1}\)种方法。
这一共造成了\(a_i - k\)个新的不合法情况。
枚举把其中\(l\)块插入原先的不合法位置之间,那么一共消除了\(l\)个不合法相邻。
这一共有