排列組合問題總結

2021-09-02 17:58:57 字數 1955 閱讀 1119

根本思想還是組合數學的加法原則,將乙個狀態分成幾個不相交的狀態,然後用加法原則加起來即可

如果:n>=m c(n

−1,m

−1

)c(n-1,m-1)

c(n−1,

m−1)

否則 n000

分析:

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

c (n

+m−1

,m−1

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

c(n+m−

1,m−

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

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

dp[n][m]表示n個球 m個盒子的方法數

分兩種狀態

1.第n個球單獨在乙個盒子裡 有dp[n-1][m-1]

2.第n個球不單獨在乙個盒子裡 有m*dp[n-1][m]

dp[

n][m

]=m∗

dp[n

−1][

m]+d

p[n−

1][m

−1

]dp[n][m]=m * dp[n-1][m]+dp[n-1][m-1]

dp[n][

m]=m

∗dp[

n−1]

[m]+

dp[n

−1][

m−1]

邊界條件:

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

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

0,n列舉使用箱子的個數即可 此時的dp[n][m]是情況三的第二類的斯特林數an

s=∑i

=0md

p[n]

[i

]ans=\sum_^m dp[n][i]

ans=∑i

=0m​

dp[n

][i]

a ns

=dp[

n][m

]∗m!

ans=dp[n][m]*m!

ans=dp

[n][

m]∗m

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

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

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

n個球m個盒子,分兩種情況

dp[n][m]代表n個球m個盒子允許空箱的個數

兩種狀態

1.每個盒子至少有乙個球 有dp[n-m][m]種情況

2.至少有乙個盒子沒有球 有dp[n][m-1]種情況

n-m>=0:

dp[

n][m

]=dp

[n][

m−1]

+dp[

n−m]

[m

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

dp[n][

m]=d

p[n]

[m−1

]+dp

[n−m

][m]ndp

[n][

m]=d

p[n]

[m−1

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

dp[n][

m]=d

p[n]

[m−1

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

排列組合總結

在此介紹二進位制轉化法,即,將每乙個組合與乙個二進位制數相應起來,列舉二進位制的同一時候,列舉每乙個組合。如字串 abcde,則有 00000 null 00001 a 00010 b 00011 ab 00100 c 11111 abcde 給出程式例如以下所看到的 include include...

排列組合總結

在此介紹二進位制轉化法,即。將每乙個組合與乙個二進位制數相應起來,列舉二進位制的同一時候,列舉每乙個組合。如字串 abcde,則有 00000 null 00001 a 00010 b 00011 ab 00100 c 11111 abcde 給出程式例如以下所看到的 include include...

排列組合問題

若有一串字母abc,進行全排列,有六種方法,3的階層,321,為什麼是這樣呢,我們根據 看思路 這之間會涉及遞迴,回溯 將abc看成陣列,a 0 a,a 1 b,a 2 c 下文中用a0代替a,a1代替b,a2代替c 排列的過程就是交換位置的過程 1 先對a進行交換 即k 0時 a0和a0自己交換 ...