1. 程式人生 > >“n個球放入m個盒子是否為空”的方案數

“n個球放入m個盒子是否為空”的方案數

如題:n個小球放到m個盒子裡的方案數

1、球相同,盒子不同,不允許空

分成m段,n-1個空選m-1個放隔板 , C n 1 m

1 C_{n-1}^{m-1}

2、球相同,盒子不同,允許空

(1) 加入m個球變成不允許空(假設m個盒子先每個都放1個球)
(2) m-1個隔板和球放在一起,從中選m-1個做隔板, C n

+ m 1 m 1
C_{n+m-1}^{m-1}

3、球相同,盒子相同,不允許空

就是整數劃分問題啊…n個數寫成m個數的和的形式的方案數
f[i][j]=f[i−1][j−1]+f[i−j][j]

有1的話就是f[i−1][j−1],沒有1的話就拿出j個1先放上再分剩下的,f[i−j][j]

4、球相同,盒子相同,允許空

j = 1 m f [ n ] [ j ] \sum_{j=1}^mf[n][j]

5、球不同,盒子相同,不允許空

第二類Stirling數:n個不同的元素分成m個集合的方案數 S ( n , m ) S(n,m)
S(i,j)=S(i−1,j−1)+S(i−1,j)∗jS(n,n)=1n≥0, S(n,0)=0,n≥1

考慮一個元素可以放入一個空集合或者已經有元素的集合(j種選擇)

6、球不同,盒子相同,允許空

列舉非空盒子數量
j = 1 m S ( n , j ) \sum_{j=1}^mS(n,j)

7、球不同,盒子不同,不允許空

盒子全排列標號就行了
S ( n , m ) m ! S(n,m)∗m!

8、球不同,盒子不同,允許空

不能簡單的全排列標號,因為空盒子標號沒有意義
所以列舉非空盒子數量的時候乘上個組合數和全排列標號
j = 1 m S ( n , j ) A ( m , j ) \sum_{j=1}^mS(n,j)*A(m,j) ,其中A是排列 A ( m , j ) = C ( m , j ) j ! A(m,j)=C(m,j)*j!