從n個物品中選m個,那麼就有\(\frac\)種選法,即為\(c^m_n\)或\(\binom\)
有幾個公式:
\[c_n^m=c_^+c_^
\]\[\sum_ic_n^i=2^n
\]二項式定理:\((x+y)^n=\sum_ic_n^ix^iy^\)
\[\sum_^n(-1)^kc_n^k=[n=0]
\]二項式反演: $$f_i=\sum_jc_i^jg_j\leftrightarrow g_i=\sum_j(-1)c_ijf_j$$
可重組合:
從n個物品中選m個,每個物品都可以任意選,方案數為\(\binom\)
簡單來說,就是要求$$|u\cap \bar a_1\cap \bar a_2\cap \cdots \cap \bar a_k|$$
這個東西就等於$$\sum_(-1)^|u\cap s_1\cap s_2\cap \cdots\cap s_|$$
有兩個顯然結論:
\(min\,c\}=max\,min\\}\)
\(max\=a+b-min\\)
然後就有$$max_^n=\sum_(-1)^min$$
\[min_^n\=\sum_(-1)^max\
\]卡特蘭數\(c_n=\sum_c_ic_\),\(c_0=c_1=1\)。
還有乙個遞推式\(c_n=c_(4n-2)/(n+1)\)。
\(c_n=\frac^n}=c_^n-c_^\)。
還有乙個很像的數列是\(f_n=f_+\sum_^f_if_\)
他的遞推式是\(f_n(n+1)=(6n-3)f_-(n-2)f_\)
把n個物品放到m個無序集合且不允許集合為空的方案數為第二類斯特林數,記為\(s(n,m)\)或\(\beginn\\m\end\)。
遞推式:\(s(n,m)=s(n-1,m-1)+m*s(n-1,m)\)考慮定義,就是列舉下乙個物品單獨為乙個集合或和其他的元素同在乙個集合(或是否是這個集合的最後乙個元素)。
容斥式子:\(s(n,m)=\frac\sum_k(-1)^kc_m^k(m-k)^n\)
其意義就是列舉空的集合的數量,因為集合是無序的,所以要除以\(m!\)。
如果把\(\frac\)乘進去,可以得到\(s(n,m)=\sum_k\frac\frac\),這樣就可以直接卷積。
性質: $$nk=\sum_ks(k,i)\cdot i!\cdot c_n^i$$
左邊就是把k個物品放到n個集合裡,右邊就是列舉放到哪幾個集合裡。
第一類斯特林數就是把n個物品劃分為m個圓排列的方案數,記為\(s(n,m)\)或\(\left[\beginn\\m\end\right]\)。
遞推式:\(s(n,m)=s(n-1,m-1)+(n-1)s(n-1,m)\)。因為這個是圓排列,所以每乙個元素有n-1中插法。
還有有符號的第一類斯特林數,記為\(s_s(n,m)=(-1)^s_u(n,m)\)。
\(s(n,m)\)的生成函式是\(\prod_^(x+i)\),\(s_s(n,m)\)的生成函式是\(\prod_^(x-i)\)。
一些性質(不帶下標預設為無符號):
\(x^}=\sum_is_s(n,i)x^i,x^}=\sum_is(n,i)x^i\)
\(\sum_is(n,i)=n!\)
\(\sum_is_s(n,i)=[n=0]\)
\[f_i=\sum_js(i,j)g_j\leftrightarrow g_i=\sum_j(-1)^s(i,j)f_j
\]
c stl 一些東西
std map 其key是基於比較運算子的,因此自定義型別需要為該型別設定比較運算子操作 class a private int mm std mapkk std unordered map 基於hash實現,需要為自定義型別設定 運算子和雜湊函式 class a int get value con...
一些基礎的東西
在c 中宣告變數使用下述的語法 但是在c 中有變數初始化的要求,即c 編譯器需要用某個初始值對變數進行初始化,之後才能在操作中引用該變數。c 有兩個方法可確保變數在使用前進行了初始化 變數是類 class 或結構 struct 中的字段 field 如果沒有顯式初始化,在預設狀態下建立這些變數時,其...
SVN的一些東西
例如 主幹mainproject,分支 branchproject 1 將分支合併到主幹 url位址路徑一定要對 找到主幹檔案mainproject,右擊 tortoisesvn merge.合併 選擇第乙個 merge a range of revisions 合併乙個版本範圍 接著在 url t...