排列組合問題的一些整理


初步:加法原理和乘法原理

概念:

加法原理是分類計數原理,常用於排列組合中,具體是指:做一件事情,完成它有n類方式,第一類方式有M1種方法,第二類方式有M2種方法,……,第n類方式有Mn種方法,那么完成這件事情共有M1+M2+……+Mn種方法。
做一件事,完成它需要分成n個步驟,做第一 步有m1種不同的方法,做第二步有m2種不同的方法,……,做第n步有mn種不同的方法。那么完成這件事共有 N=m1×m2×m3×…×mn 種不同的方法。

這個感覺大家都知道(小學奧數就開始學了吧qwq),感覺沒有什么好說的qwq

例題參照:AHOI2009 中國象棋

這個題因為和DP結合,狀態設計比較難想。但是當我們用\(f[i][j][k]\)來表示到第i行,其中j列擺放了一個棋子,k列擺放了兩個棋子之后,我們不難發現狀態的轉移就是其實就是加法原理和乘法原理的應用:
以下是核心代碼:

dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k])%mod;
//這一行什么都不放
dp[i][j-1][k+1]=(dp[i][j-1][k+1]+j*dp[i-1][j][k])%mod;
//這一行在原先只有一個棋子的那一列放一個棋子
dp[i][j+1][k]=(dp[i][j+1][k]+(m-k-j)*dp[i-1][j][k])%mod;
//這一行在原先沒有棋子的那一列放一個棋子
dp[i][j+2][k]=(dp[i][j+2][k]+(m-k-j)*(m-k-j-1)/2*dp[i-1][j][k])%mod;
//這一行在原先沒有棋子的兩列分別擺放一個棋子
dp[i][j][k+1]=(dp[i][j][k+1]+(m-k-j)*dp[i-1][j][k]*j)%mod;
//這一行在原先有一個棋子和沒有棋子的兩列分別放一個
dp[i][j-2][k+2]=(dp[i][j-2][k+2]+j*(j-1)/2*dp[i-1][j][k])%mod;
//這一行在原先有一個棋子的兩列分別擺放一個棋子

加法原理和乘法原理的區別:

一個與分類有關,一個與分步有關;加法原理是 “分類完成”,乘法原理是 “分步完成”。

初識排列

定義

\(n\)個不同元素中,任取\(m\)(m<=n,m與n均為自然數, 下同)個元素按照一定的順序排成一列,叫做從\(n\)個不同元素中取出\(m\)個元素的一個排列;從\(n\)個不同元素中取出\(m\)(\(m<=n\))個元素的所有排列的個數,叫做從\(n\)個不同元素中取\(m\)個元素的排列數,用符號\(A_n^m\) 表示。

計算公式

\(A_n^m=\frac{n!}{(n-m)!}\)

常見問題

1、全排列問題
\(A_n^n=n(n-1)(n-2)...3\times 2\times 1=n!\)

2、部分排列
就是上面的計算公式qwq

初識組合

定義:

\(n\)個人中選\(m\)(\(m<=n\)) 個出來,不排隊,不在乎順序就是\(C_n^m\)
它和排列有關系為:\(C_n^m\times A_m^m=C_n^m\times m!=A_m^n\)
(解釋:因為要考慮順序,選出來的那m個人還需要全排列)

公式:

1、\(C_m^n=\frac{m!}{n!\times (m-n)!}\)

2、\(C_m^n=C_m^{m-n}\)

3、\(C_m^n=C_{m-1}^n+C_{m-1}^{n-1}\)

4、\(C_m^{n+1}=\frac{C_m^{n}\times (m-n)}{n+1}\)

5、\(C_{m}^{0}+C_{m}^{1}+C_{m}^{2}+...+C_{m}^{m}=2^{m}\)

  • 對於第二個公式應該很好理解,就是反選,方案數量自然是一樣的。這體現的是它良好的對稱性。

  • 第三個公式平常用來遞推。可以划分為子問題理解:為如果選第n個數,那么就是在n-1個數里面選擇m-1個數,如果不選第n個數,就是在n-1個數里面選m個數。證明如下:

\(∵C_{m}^{n}=\frac{n!}{m!(n-m)!}\)

\(∵C_{m}^{n-1}=\frac{(n-1)!}{m!(n-m-1)!}\)

\(∴C_{m}^{n-1}=\frac{(n-1)!}{m!(n-m-1)!}=\frac{(n-1)!(n-m)}{m!(n-m)!}\)

\(∵C_{m-1}^{n-1}=\frac{(n-1)!}{(m-1)!(n-m)!}=\frac{(n-1)!m}{m!(n-m)!}\)

\(∴C_{m-1}^{n-1}+C_{m-1}^{n}\)

\(=\frac{(n-1)!m}{m!(n-m)!}+\frac{(n-1)!(n-m)}{m!(n-m)!}\)

\(=\frac{n!}{m!(n-m)!}\)

\(=C_m^n\)

  • 第四個公式很好證明(展開即可),這里介紹它的應用:(二項式展開)求\((a+b)^n\)展開式的各項系數。
    我們會想到楊輝三角進行預處理,但是也可以直接利用公式:
    \(C_n^{m+1}/C_n^m=\frac{n-m}{m+1}\)遞推來解決。

有限的可重復元素的排列

假設現在有n個元素,對於第一類元素\(n_1\),有sum1個重復,第二類元素\(n_2\),有sum2個重復......第m類元素\(n_m\),有summ個重復,總方案數為:

\[\frac{n!}{sum_1!\times sum_2!\times ...\times sum_m!} \]

附上一張來自wikipedia的圖幫助理解:

無限的可重復元素組合問題

上面講解的是有限的可重復元素排列問題,下面講無限的可重復元素排列問題(就是每個元素都可以用無限多次參與排列)

現在我們從m個元素中選擇k個元素的,然后我們將這k個元素進行排序之后應該是這個樣子:(設我們選擇的數為編號為\(a_i\)

\(1<=a_1<=a_2<=......<=a_k<=m\)

那么現在我們將等於號消去:

\(1<=a_1<=a_2+1<=a_3+2<=......<=a_k+k-1<=m+k-1\)

現在我們設\(b_i=a_i+i-1\),那么很容易我們可以發現

\(1<=b_1<b_2<b_3<......<b_k<=n-k+1\)

那么現在問題就轉換成了在\([1,n+k-1]\)中選擇k個不重復的元素了,那么根據我們的組合公式,自然是\(C_{m+k-1}^k\)了qwq

同理還有求編號在1~n的元素中取k個元素,使得他們的編號不相鄰。公式是一樣的,證明也是一樣的。

二項式

這里有一張來自wikipedia的圖,我覺得特別棒

二項式的系數公式:
\((x+y)^n=C_n^0x^ny^0+C_n^1x^{n-1}y^1+......+C_n^nx^0y^n\)
(可以看到,其實也可以用楊輝三角表示)
綜合起來就是

\((x+y)^n=\sum_{k=0}^n\times C_n^k\times x^{n-k}\times y^k\)

錯排問題

錯排就是諸如有1~n n個人,每個人按照1~n進行編號,現在要讓他們排成一隊,但是每個人不能在自己編號上的問題。

對於這個問題,luogu日報已經有專門的一期來進行詳細的講解~~
傳送門——戳我~~

錯排的遞推公式:
\(dp[1]=0\)
\(dp[2]=1\)
\(dp[i]=(n-1)(dp[i-1]+dp[i-2])\)

圓排

從n個不同元素中不重復地取出m(1≤m≤n)個元素在一個圓周上,叫做這n個不同元素的圓排列。如果一個m-圓排列旋轉可以得到另一個m-圓排列,則認為這兩個圓排列相同。

n個不同元素的m-圓排列個數N為:
\(A_n^m/m=\frac{n!}{(n-m)\times m}\)
特別地,當m=n時,n個不同元素作成的圓排列總數N為: \(N=(N-1)!\)

環上的染色問題

現在一個環被分成了n段,要求每一段上都塗上顏色。一共有k種不同的顏色,塗好之后兩兩相鄰顏色不能相同。問有多少種塗色方案?

這個問題我們可以這樣考慮:
第一種情況:如果我們把原先的環看作只有\(n-1\)段,進行塗色,那么就是子問題\(A_{n-1}\),而且因為現在兩兩相鄰的一定顏色不同,所以這時候我們再添加一個的話就是乘上\(m-2\)
第二種情況:我們把原先的環看作\(n-2\)段,,這樣的話轉換成了\(A_{n-2}\)的子問題,然后我們隨意將一段分為兩段,這時候還差一段,在兩個相同顏色中間插入一種顏色,自然是有\(m-1\)種選擇方法。
遞推公式整理如下:

\(A_n=(m-2)A_{n-1}+(m-1)A_{n-2}\)

這是一個二階常系數遞推式,推導之后通項公式如下:

\(A_n=(m-1)^n+(-1)^n\times (m-1)\)

求組合數:

1、如果p是質數而且比較小\((<=10^5)\),可以使用lucas定理
2、如果\(n,m<=10^6,p<=10^9\) 可以先預處理出來逆元,然后直接算qwq

補充楊輝三角中的一個求斜列和的公式:

\(C_n^i+C_{n+1}^i+...+C_{m}^i=C_{m+1}^{i+1}-C_{n}^{i+1}\)
具體就是可以把右邊的那個減數轉移到左邊來。。其他的合並很直觀了qwq


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM