\(\mathrm c_n^m = \frac\)
\(\mathrm a_n^m = \frac\)
1.不同球n,不同盒子m,可為空,全放入方案數:
每個球m種方法,\(ans = m^n\)
2.不同球,不同盒,不可為空
先思考不同球,相同盒子,不可為空
設\(f[n][m]\)為方案數,那麼對於乙個球而言,可以選擇放入前面放過的盒子,也可以新開乙個,所以有:
\(f[n][m] = f[n-1][m] \times m + f[n-1][m-1]\)
邊界條件:\(f[n][1] = 1,f[n][n]=1\)
那麼只要把\(f[n][m]\)乘上m的排列數就好了
\(ans = f[n][m] \times m!\)
3.相同球,不同盒子,可為空
先思考不可為空,
那麼看作有n個球,\(n-1\)個縫,選\(m-1\)個把板插進去
\(ans=\mathrm c_^\)
然後可為空,相當於多放m個球在每個盒子裡,再放n個球
轉換為:\(ans=\mathrm c_^\)
4.相同球,不同盒子,不可為空
見35.不同球,相同盒子,可為空
在2中提過\(f[n][m]\)為不可為空的方案數,那麼相當於不為空放乙個盒子+不為空放兩個盒子+....+不為空放m個盒子
轉換為:\(ans=\sum_^m f[n][i]\)
6.不同球,相同盒子,不可為空
見27.相同盒子、相同球,可為空
設\(g[n][m]\)為n個球,m個盒子的情況。
那麼分成兩種情況:有盒子為空,和無盒子為空
劃分子問題,有盒子為空可劃分為\(n,m-1\),沒有盒子不為空可劃分為\(n-m,m\)(每個盒子裡先放乙個)
那麼\(g[n][m] = g[n][m-1] + g[n-m][m]\)
8.相同盒子,相同球,不為空
直接可得出答案就是7中的\(f[n-m][m]\)。
斯特林數
第二類斯特林數
劃分數給定乙個凸\(n\)邊形,用對角線(對角線不可相交)把它劃分成三角形,問方案數(顯然旋轉後相同的兩種方案都要算進去
接下來,思考劃分子問題,容易想到把該多邊形劃分為兩個多邊形,但是發現如果用直線劃分的話需要考慮很多重複的問題,於是用乙個三角形把該多邊形劃分成兩個三角形。
想到每個多邊形中每一條邊都屬於乙個三角形,那麼被用來劃分的三角形可以「依附」與一條固定的邊上。然後剩下的乙個點在多邊形上移動,當那個點在下圖中v3時,可劃分為乙個三角形和乙個n-1邊形(一共n+1條邊)。然後不斷移動未確定的點,就可以得到多種劃分,縮減成不同子問題。再利用加分原理把這些情況加起來(並不會有重複,用來劃分的三角形的確定的那條邊在不同情況中屬於的三角形一定不同)就可以得到最終解。
得到乙個柿子:\(f[n]=\sum_^f[i]f[n-i+1]\)且\(f[2]=1\)
我們就得到了catalan數的線性遞推關係。
當然,在更多的情況裡,卡特蘭數一般是\(f[n]=\sum_^f[i]f[n-i-1]\)且\(f[0]=1,f[1]=1\),前後兩個並沒有什麼區別,只是根據具體情況調整了邊界而已。
然後是通項公式:\(f[n]=\frac^n}\)
至於推導過程或證明,留坑(等我會了再說)。
相似於第二類卡特林數,意義為把\(n\)個元素劃分為不同非空子集的方案數(集合數量可調整,元素不同)。
第二類斯特林數的遞推式為\(f[n][m] = f[n-1][m-1] + f[n-1][m] * m\) 那麼貝爾數便可以\(f[n][m]\)的基礎上得來,\(b_n = \sum_^f[n][i]\)。
貝爾數\(b_n\)也可以從前面的項遞推出來。方法如下:
將乙個元素劃分進來,構成\(b_\)。
那麼可以將它單獨劃分為一組,剩下\(n\)個元素劃分,方案數為\(n\)的貝爾數\(b_n\)
若將這個新劃分的元素可以與另乙個任意的元素劃分為一組,還剩任意的\(n-1\)個元素,那麼方案數即是從\(n\)個元素挑選\(n-1\)個元素(也可以理解為挑選出1個和新劃分的元素組成一組),求出它們的貝爾數\(b_\)
若將這個新劃分的元素與另外任意兩個元素劃分為一組,從\(n\)中挑選\(n-2\)個元素,並求出\(b_\)。
以此類推,並使用加法原理加起來,遞推式子是:\(b_ = \sum_^\mathrm c_^ib_\)
二項式定理
\(\sum_^n^x^k}\)
其實該定理與二項式有聯絡,既是發現上面式子的值\(=(x+1)^k\),那麼便可以使用在組合中所用甚廣的楊輝三角來把它拆開,化簡就是二項式定理。
十分重要的容斥原理
先回憶小學的時候學過的:
已知滿足條件一的集合a,滿足條件二的集合b
求兩個集合的並集的大小。
答案就是\(|a+b|-|a\cap b|\)
然後:\(|a \cup b \cup c| = |a| + |b| + |c| - |a \cap b| - |a\cap c| - |b\cap c| + |a\cap b \cap c|\)
最終可以推廣出:
\(|\bigcup_^a_i| = \sum_^(-1)^\sum_^\)
問題二:
途中不能接觸直線\(y=x\),從(0,0)到(n,n),七點與終點不算接觸
相當於從(0,1)到(n,n-1)與從(1,0)到(n-1,n),我們先考慮一邊,從(0,1)到(n,n-1)
不管有沒有接觸,走的方案數為:\(c_^\)
再考慮接觸,如果接觸了,我們把接觸,以及穿過直線後的影象直到回到直線一邊的部分對稱過去
發現對稱過去後的這一部分加上沒有被對稱的一部分剛好可以被表示為(1,0)到(n,n-1)的一條路徑。推廣一下,所有這樣接觸了的路徑都可以與(1,0)到(n,n-1)的某條路徑一一對應。那麼我們只需要減去從(1,0)到(n,n-1)的所有路徑就可以算出正確答案。
至於另一部分答案,對稱一下即可。
\(ans = 2(\mathrm c_^-\mathrm c_^)\)
這個模型其實與卡特蘭數有些關係,將不可接觸改為不可穿過,再只考慮一部分,就可以把該題變成乙個卡特蘭數的題目。並且,你也可以利用這個來推到卡特蘭數的通項公式。
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
數學 組合數學
mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...
組合數學筆記
從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...