1. 程式人生 > >排列組合 ——插隔板

排列組合 ——插隔板

center src 是把 依次 提取 多少 要求 mil 如果

排列組合

——插隔板

I.n個相同小球分成m部分,每部分可以沒有球。

n+(m-1)個數中選擇(m-1)次數作為隔板,其它的數作為小球。Count=C(n+m-1,m-1)。

II.n個相同的小球分成m部分,每部分至少有1個小球。

每個在相鄰小球的中間,有n-1個隔板,從n-1個隔板中選取m-1個隔板,從而分成m部分。

Count=C(n-1,m-1)。

也可以認為:是提前從每部分提取1個小球,n個小球變為n-m個小球。可看成是把n-m個小球分成m部分,每部分可以沒有球;然後把1個小球加入每部分,使每部分至少有一個球。

Count=C((n-m)+m-1,m-1)=C(n-1,m-1)

III. n個相同的小球分成m部分,每部分至少有k個小球。

2同理,提前從每部分提取k個小球,n個小球變為n-m*k個小球。可看成是把n-m*k個小球分成m部分,每部分可以沒有球;然後把k個小球加入每部分,使每部分至少有k個球。

Count=C((n-m*k)+m-1,m-1)=C(n-m*(k-1)-1,m-1)

k=1,即變為情況II

IV.有n個座位依次從左到右排列,m個人選擇座位,無其它要求。

1個人有n種選擇,第2個人有n-1種選擇,……,第m個人有n-m+1中選擇。

Count=P(n,m)

V. 有n個座位依次從左到右排列,m個人選擇座位,任意兩個人不能相鄰。

技術分享

m個(人+座位)插入n-m個空座位的左右兩旁,第1個人有n-m+1種選擇,第2個人有n-m種選擇,……,第m個人有n-m+1-(m-1)中選擇。

也可以認為:提前提取m-1個座位,n個座位變為n-m+1個座位。可看成有n-m+1個座位依次從左到右排列,m個人選擇座位,無其它要求;然後把1個座位加入所有相鄰(指的不是座位相鄰,而是指一個人向左/向右看第一個看到的人)的兩個人的中間(m-1個座位),使任意兩個人能相鄰。

Count=P(n-m+1,m)

VI. 有n個座位依次從左到右排列,m個人選擇座位,任意兩個人之間至少有k個空位。

提前提取(m-1)*k個座位,n個座位變為n-(m-1)*k個座位。可看成有n-(m-1)*k個座位依次從左到右排列,m個人選擇座位,無其它要求; 然後把k個座位加入所有相鄰(指的不是座位相鄰,而是指一個人向左/向右看第一個看到的人)的兩個人的中間((m-1)*k個座位),使任意兩個人之間至少有k個空位。

Count=P(n-(m-1)*k,m)

k=1,即變為情況V

VII.有n個座位形成圓圈,m個人選擇座位,無其它要求。

1個人有n種選擇,第2個人有n-1種選擇,……,第m個人有n-m+1中選擇。如果不考慮圓的位置編號,則一個狀態順時針旋轉k位(k=0,1,…,n-1),狀態都相同,結果在原來基礎上除以n。

考慮圓的位置編號:P(n,m)

不考慮圓的位置編號:P(n,m)/n

證明P(n,m)/n是正數:

n-k必能整除(n,k)【括號指的是兩個數的最大公約數】,若(n,k)<>1, n能被數k(1<=k<=n)所約分【即n=n/(n,k)】,那麽n能用n-k代替【即(n-k)= (n-k)/(n,k)】,最終(n,m)必是n的倍數。

VIII.有n個座位形成圓圈,m個人選擇座位,任意兩個人不能相鄰。技術分享

技術分享 To 技術分享

考慮圓的位置編號:

定義一個人A所坐的座位編號為1,然後座位編號按照順時針的方向從1到n遞增,編號為n的座位與編號為1的座位連接起來。

在編號為1的座位的和編號為n的座位中間切一刀,變成編號為1,2,…,n的一排座位。其中第n個位置不能坐人,第2個位置不能坐人,因為任意兩個人不能相鄰,而第1個位置座位有人坐。

題目轉變成n-3個座位,依次從左到右排列,m-1個人選擇座位,任意兩個人不能相鄰。

Count1=P(n‘-m‘+1,m‘)=P((n-3)-(m-1)+1,m-1)=P(n-m-1,m-1)

A的編號可以為1,2,…,n,

Count2=n*P(n-m-1,m-1)

不考慮圓的位置編號:

即不考慮什麽人坐編號為多少的位置,只考慮人之間的相對關系,如一個人的左邊/右邊是誰

m個人的位置順時針旋轉k位(k=0,1,2,…,n-1)【即第1個人的位置變為原來第(1+k)個人的位置,第2個人的位置變為第(2+k)個人的位置,依次類推】,有m種方案,但這裏只看成1種方案,所以要除以m

Count3=n*P(n-m-1,m-1)/m

IX.有n個座位形成圓圈,m個人選擇座位,任意兩個人之間至少有k個空位。

考慮圓的位置編號:

定義一個人A所坐的座位編號為1,然後座位編號按照順時針的方向從1到n遞增,編號為n的座位與編號為1的座位連接起來。

在編號為1的座位的和編號為n的座位中間切一刀,變成編號為1,2,…,n的一排座位。其中第n個~第n-k+1個位置不能坐人,第2個~第k+1位置不能坐人,因為任意兩個人之間至少有k個空位,而第1個位置座位有人坐。

題目轉變成n-k*2-1個座位,依次從左到右排列,m-1個人選擇座位,任意兩個人之間至少有k個空位。

Count=P(n‘-(m‘-1)*k,m‘)=P((n-k*2-1)-((m-1)-1)*k,m-1)=P(n-m*k-1,m-1)

A的編號可以為1,2,…,n,

Count2=n*P(n-m*k-1,m-1)

不考慮圓的位置編號:

即不考慮什麽人坐編號為多少的位置,只考慮人之間的相對關系,如一個人的左邊/右邊是誰

m個人的位置順時針旋轉k位(k=0,1,2,…,n-1)【即第1個人的位置變為原來第(1+k)個人的位置,第2個人的位置變為第(2+k)個人的位置,依次類推】,有m種方案,但這裏只看成1種方案,所以要除以m

Count3=n*P(n-m*k-1,m-1)/m

k=1,即變為情況VIII。

排列組合 ——插隔板