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

2021-08-21 07:14:39 字數 1578 閱讀 4289

思路一: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 + 5

+ 3 + 4

8 = 2 + 2 + 4

+ 3 + 3

思路二:

如果沒dp[n][m]:n個相同的球放入m個相同的盒子的放法

邊界條件:

k個球放入乙個盒子只有一種放法:dp[k][1] = 1

乙個球放入k個盒子只有一種放法:dp[1][k]=1

沒有球只有一種放法(都不放):dp[0][k]=1

狀態轉移方程:

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

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

思路一:

8個相同的球放進3個相同的盒子裡,每盒至少乙個

取球最少的盒子取1個球,取球第二少的盒子可以取[1,3]   3種 

取球最少的盒子取2個球,取球第二少的盒子可以取[2,3]   2種 

取球最少的盒子取3個球,此情況不存在,一共5種 

按取球多寡來分類討論可以做到不遺漏,不重複

類似問題:整數拆分,非遞減序

8 = 1 + 1 + 6

+ 2 + 5

+ 3 + 4

8 = 2 + 2 + 4

+ 3 + 3

思路二:

思路一:

取球最少盒子取1個球時,有116,125,134三種情況,分別有c(8,6)=28, c(8,1)*c(7,2)=168, c(8,1)*c(7,3)=280 

取球最少盒子取2個球時,有224,233二種情況,分別有c(8,2)*c(6,2)/2=210,c(8,3)*c(5,3)/2=280 

一共28+168+280+210+280=966

思路二:第二類斯特林數

一種解法同情況3的思路一,對於情況1(球同,盒同,可空)的各種組合,分別討論;

另一種解法:情況7中的一般情況(3個元素都相異),比如116,一共有6種排列(球是不同的),此問中,盒子是相同的,因此這6種排列都只算一種情況。

但如果2個元素相同的時候,有且只有 008,只有3種排列,我們多新增3種進去,令其也重複6次,則(6561+3)就是 所有的情況都重複了6次,(6561+3)/6=1094即為所求。

插板法:     c(n-1, m-1)

n個球有n+1個空,但是不能為空,兩端的空不能選,剩n-1個空;m個盒子,只需要m-1個板即可分成m份

每個球都有3種選擇,8個球就有3^8=6561

情況3中的966種情況,每種情況的三個元素都是互異的,比如 116(因為球是不同的),

這三個元素進行全排列a(3,3)=6,乘以966=5796即為所求

排列組合 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個盒子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 ...