排列組合 n個球放入m個盒子m 問題 總結

2021-09-22 22:41:52 字數 1417 閱讀 1350

原文:

求,盒子都可以分成是否不能區分,和能區分,還能分成是否能有空箱子,所以一共是8種情況,我們現在來一一討論。

1.球同,盒不同,無空箱

c(n-1,m-1), n>=m

0, n使用插板法:n個球中間有n-1個間隙,現在要分成m個盒子,而且不能有空箱子,所以只要在n-1個間隙選出m-1個間隙即可

2.球同,盒不同,允許空箱

c(n+m-1,m-1)

我們在第1類情況下繼續討論,我們可以先假設m個盒子裡都放好了1個球,所以說白了就是,現在有m+n個相同的球,要放入m個不同的箱子,沒有空箱。也就是第1種情況

3.球不同,盒相同,無空箱

第二類斯特林數dp[n][m]

dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1],1<=m=0

dp[k][0]=0,k>=1

0,n這種情況就是第二類斯特林數,我們來理解一下這個轉移方程。

對於第n個球,如果前面的n-1個球已經放在了m個箱子裡,那麼現在第n個球放在哪個箱子都是可以的,所以m*dp[n-1][m];

如果前n-1個球已經放在了m-1個箱子裡,那麼現在第n個球必須要新開乙個箱子來存放,所以dp[n-1][m-1]

其他的都沒法轉移過來

4.球不同,盒相同,允許空箱

sigma dp[n][i],0<=i<=m,dp[n][m]為情況3的第二類斯特林數

這種情況就是在第3種情況的前提下,去列舉使用的箱子的個數

5.球不同,盒不同,無空箱

dp[n][m]*fact[m],dp[n][m]為情況3的第二類斯特林數,fact[m]為m的階乘

因為球是不同的,所以dp[n][m]得到的盒子相同的情況,只要再給盒子定義順序,就等於現在的答案了

6.球不同,盒不同,允許空箱

power(m,n) 表示m的n次方

每個球都有m種選擇,所以就等於m^n

7.球同,盒同,允許空箱

dp[n][m]=dp[n][m-1]+dp[n-m][m], n>=m

dp[n][m]=dp[n][m-1], n現在有n個球,和m個箱子,我可以選擇在所有箱子裡面都放上1個球,也可以不選擇這個操作。

如果選擇了這個操作,那麼就從dp[n-m][m]轉移過來

如果沒有選擇這個操作,那麼就從dp[n][m-1]轉移過來

8.球同,盒同,無空箱

dp[n-m][m],dp同第7種情況,n>=m

0, n因為要求無空箱,我們先在每個箱子裡面放1個球,然後還剩下n-m個球了,再根據情況7答案就出來了

如果有錯誤,希望菊苣指出~

排列組合 n個球放入m個盒子m 問題 總結

求,盒子都可以分成是否不能區分,和能區分,還能分成是否能有空箱子,所以一共是8種情況,我們現在來一一討論。1.球同,盒不同,無空箱 c n 1,m 1 n m 0,n使用插板法 n個球中間有n 1個間隙,現在要分成m個盒子,而且不能有空箱子,所以只要在n 1個間隙選出m 1個間隙即可 2.球同,盒不...

演算法題 模板 N個球放入M個盒子中

也就是所有球都是一樣的,但是盒子有區別,且不能出現空放的情況。採用插板法,相當於在n 1個空隙中,插入m個盒子,而由於不能有空盒子,所以n個球的最前邊或者最後邊一定會放乙個盒子,所以相當於n 1和間隙中放入m 1個盒子。c n 1,m 1 n m 0,n先假設m個盒子中都放好了1個球,即假設共有m ...

「n個球放到m個盒子」問題整理

思路一 8個球放到3個盒子 取球最少盒子取0個球,取球第二少的盒子取 0,4 取球最少盒子取1個球,取球第二少的 盒子取 1,3 取球最少盒子取2個球,取球第二少的 盒子取 2,3 一共5 3 2 10種 類似於 整數拆分 包含0 非遞減序 8 0 0 8 1 7 2 6 3 5 8 1 1 6 2...