排列組合:
排列推導:
很好證明,將定義式子寫出來后合並分數即可.
二項式定理:
證明可以利用上面的推導做歸納。
多重集的排列數
定義:
多重集是包含重復元素的廣義集合。
而多重集的排列數又稱為 多重組合數 。
性質:
設 \(S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k,\}\),表示由 \(n_1\) 個 \(a_1\) .... \(n_k\) 個 \(a_k\) 組成的多重集,則 \(S\) 的全排列個數為:
相當於是把相同元素的排列數除掉了。
具體來說,有 \(k\) 種不一樣的球,每種球的個數分別是 \(n_1,n_2,....,n_k\) ,且加和為 \(n\)。
這 \(n\) 個球的全排列數就是 多重集的排列數。
多重集的組合數 \(1\):
設 \(S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k,\}\),表示由 \(n_1\) 個 \(a_1\) .... \(n_k\) 個 \(a_k\) 組成的多重集。
那么對於整數 \(r(r < n_i)\) ,從 \(S\) 中選擇 \(r\) 個元素組成一個多重集的方案數就是 多重集的組合數 。
這個問題等價於 :\(x_1+x_2+...+x_k=r\) 的非整數解的數目,可以用插板法解決。答案為:
證明:
因為在這種情況下, \(x_{[1,k]}\) 的數可能為 \(0\) ,我們把每一個 \(x+1\) ,得到了這個式子:
代換意義就是用 \(k-1\) 個擋板,在 \(k+r-1\) 個空隙,將 \(k+r\) 個小球分成 \(k\) 部分。即以上式子。
多重集的組合數 \(2\):
設 \(S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k,\}\),表示由 \(n_1\) 個 \(a_1\) .... \(n_k\) 個 \(a_k\) 組成的多重集。
對於正整數 \(r(r < n)\) , 求從 \(S\) 中選擇 \(r\) 個元素組成一個多重集的方案數.
這樣的話就限制了每種元素取的個數,把這個問題轉化成帶限制的線性方程:
我們利用容斥原理去解決,模型如下:
-
全集:\(\sum_{i=1}^k x_i=r\) 的非負整數解
-
屬性:\(x_i\leq n_i\)
設 滿足屬性 \(i\) 的集合是 \(S_i\) ,\(\overline{S_i}\) 表示不滿足屬性 \(i\) 的集合,即滿足 \(x_i \geq n_i+1\) 的集合,那么答案即為:
根據容斥原理。。。。。 具體在 \(OI-WIKI\) 上都有。
用全集 \(|U|=\binom{r+k-1}{k-1}\) 減去上面式子,得到了多重集的組合數:
其中 \(A\) 是充當枚舉子集的作用,滿足 \(|A|=p, A_i<A_{i+1}\) 。
不相鄰的排列:
定義:
\([1,n]\) 這 \(n\) 個自然數中選 \(k\) 個,這 \(k\) 個數中任何兩個數都不相鄰的組合有:
錯排:
詳情見我另外一篇博客:錯排
圓排列:
定義:
\(n\) 個人全部來圍成一圈,所有的排列數即為 \(Q_n^n\)
分析:
考慮其中已經排好的一圈,從不同位置斷開,又變成不同的序列,所以有以下推導:
從這里能推導出 \(n\) 個人其中 \(m\) 個圍成一圈的方案數:
組合數性質:
1. 將選出的集合對全集取補集:
2. 遞推式:
3. 組合數遞推式(和上方相同)
然后一開始初始化是這樣的:
c[1][1]=1; for(int i=0;i<=n;i++) c[i][0]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++){
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
這個式子是楊輝三角的公式表達。
4. 二項式定理特殊情況:
5. 二項式定理另一種情況:
6. 拆組合數:
當 \(m=n\) 的時候,則有式子:
剩下的看 OI-WIKI 好了.
