容斥 組合計數

雙射

單射 :不存在A中有兩個元素 和 B 中同一個元素對應
滿射 :B中每一個元素都在A中有對應的元素
單射 + 滿射 = 雙射
雙射一定滿足A ⁣= ⁣B|A|\!=\!|B|

Lucas定理

LucasLucas定理是用來求c(n,m)modpc(n,m) mod\,p的值.((p是素數))
表達式如下:
C(n,m)%p=C(n/p,m/p)C(n%p,m%p)%pC(n,m)\%p=C(n/p,m/p)*C(n\%p,m\%p)\%p
可遞歸實現,時間複雜度:O(plogp(n))O(plog_p(n)),大致可認爲是O(plogn)O(plogn)

容斥的擴展公式

有集合 S1...SnS_1... S_ni=1nSi\bigcup_{i=1}^nS_i
i=1nSi ⁣=TSiTSi(1)T1\bigcup_{i=1}^nS_i \!= \sum_{T\in S}|\bigcap_{i\in T}S_i|*(-1)^{|T|-1}
小練習
nn個整數變量xix_i滿足0 ⁣ ⁣xi ⁣ ⁣ci0\!\leq\!x_i\!\leq\! c_i
xx的和等於mm的方案數

nm ⁣ ⁣106n*m\!\leq\!10^6
n ⁣ ⁣20,m ⁣ ⁣109n\!\leq\!20,m\!\leq\!10^9

Min_Max容斥

有時maxmax的期望非常不好算,但是minmin的期望很好算,那麼就可以把求maxmax的期望轉化成求minmin的期望
max(a,b)=a+bmin(a,b)max(a,b)=a+b-min(a,b)
max(S)=rS(1)T1min(T)max(S)=\sum_{r\subseteq S}(-1)^{|T|-1}min(T)
同樣的 E(max(S))=E(rS(1)T1min(T))E(max(S))=E(\sum_{r\subseteq S}(-1)^{|T|-1}min(T))

小練習
nn種卡片,每一秒都有pip_i的概率獲得第i種卡片,求每張卡片都至少有一張的期望時間
n20n\leq20

第一類斯特林數

s(n,k)s(n,k)表示把nn個數的排列中有kk個環的方案數

遞推
考慮第nn個數放在了哪裏
1.1.自己成爲一個環,方案爲s(n1,k1)s(n−1,k−1)
2.2.插入之前的環中,那麼一共有n1n-1的位置,所以方案爲s(n1,k) ⁣ ⁣ks(n−1,k)\!\cdot\!k
綜上
s(n,k) ⁣= ⁣s(n1,k1) ⁣+ ⁣(n1) ⁣ ⁣s(n1,k)s(n,k)\!=\!s(n-1,k-1)\!+\!(n-1)\!\cdot\! s(n-1,k)

小練習
nn個人分配到kk個圓桌上,圓桌旋轉相等的方案數,即只關心每個人左邊的人是誰
n,k ⁣ ⁣1000n,k\!\leq\!1000
s(n,k)=i=0ns(ni,k1)(n1)!(ni)!1(n1)!s(n,k)=i=0ns(ni,k1)1(ni)! s(n,k)=\sum_{i=0}^ns(n-i,k-1)\cdot\frac{(n-1)!}{(n-i)!}\\ \frac{1}{(n-1)!}\cdot s(n,k)=\sum_{i=0}^n s(n-i,k-1)\cdot\frac{1}{(n-i)!}
使f(n,k)=i=0ns(i,k)i!1(n1)!s(n,k) ⁣= ⁣f(n1,k1)f(n,k) ⁣= ⁣f(n1,k)+s(n,k)n! 使f(n,k)=\sum_{i=0}^n\frac{s(i,k)}{i!}\\ 那麼\frac{1}{(n-1)!}s(n,k)\!=\!f(n-1,k-1)\\ 更新f(n,k)\!=\!f(n-1,k)+\frac{s(n,k)}{n!}

第二類斯特林數

S(n,m)S(n,m)表示把nn個不同的球放到mm個相同的盒子裏,且不允許盒子爲空的方案數
SS爲第二類斯特靈數

遞推:
考慮第nn個球放到了哪裏
1.1.自己佔一個盒子,方案爲S(n1,m1)S(n−1,m−1)
2.2.和之前的元素共佔mm個盒子,方案爲S(n1,m) ⁣ ⁣mS(n−1,m)\!\cdot\!m,最後的係數是考慮放在不同位置。
這裏我們認爲{1}{24}{3}\{1\}\{2 4\}\{3\}{1}{2}{34}\{1\}\{2\}\{3 4\}是不同的方案
{1}{24}{3}\{1\}\{2 4\}\{3\}{1}{3}{24}\{1\}\{3\}\{2 4\}是相同的方案
綜上
S(n,m) ⁣= ⁣S(n1,m1) ⁣+ ⁣S(n1,m) ⁣ ⁣mS(n,m)\!=\!S(n−1,m−1)\!+\!S(n−1,m)\!\cdot\!m
S(0,0) ⁣= ⁣1邊界條件S(0,0)\!=\!1


容斥
S(n,m)=1m!k=0m(1)kC(m,k)(mk)nS(n,m)=\frac{1}{m!}\sum^m_{k=0}(−1)^k\cdot C(m,k)\cdot(m−k)^n
也比較好理解,我們去枚舉一個空盒子的個數
答案 = 無視空盒子放的方案 - 至少有一個盒子爲空的方案 + 至少有兩個盒子爲空的方案 + …
這個式子可以用FFTFFT優化,因此我們可以在O(nlogn)O(nlogn)的複雜度內得到一行的斯特林數

小練習
BellNumbersBell Numbers - CF568BCF568B
nn個數分成若干個集合的方案數
B(n)=i=1nS(n,i)B(n)=\sum_{i=1}^{n}S(n,i)


歐拉數

nn個數的排列字其中有kk個數滿足pi<pi+1p_i<p_{i+1}的排列個數
遞推求解
E(n,k)=(k+1) ⁣ ⁣E(n1,k) ⁣+ ⁣(nk) ⁣ ⁣E(n1,k1)E(n,k)=(k+1)\!\cdot\!E(n-1,k)\!+\!(n-k)\!\cdot\!E(n-1,k-1)

數位dp

數位dpdp是計數類dpdp的一種,其基本問題爲求一段區間內滿足特定限制的數的個數。
其思路是在數位上進行dpdp,通常在十進制或二進制上進行。
dpdp時可能需要記錄:當前在第幾位,上一個數字是什麼,和題目有關的一些信息,當前位是否和限制相等等。
注意:
如果是多個整數,可能需要記錄進位,借位等
注意前導零的問題((這玩意細節很多))
小練習
1.1.給定一個區間[l,r][l,r],問llrr的整數中有幾個轉換成二進制數後0011((不計前導零)) (POJ3252)(POJ3252)
1 ⁣ ⁣l ⁣< ⁣r ⁣ ⁣2 ⁣ ⁣1091\!\leq\!l\!<\!r\!\leq\!2\!\cdot\!10^9


2.2.llrr之間且能被它的十進制表示的每個數字整除的數的個數。
2424是滿足條件的,因爲24242244的倍數。(CF55D)((CF 55D)(時限:4s4s))
1 ⁣ ⁣l ⁣< ⁣r ⁣ ⁣9 ⁣ ⁣10181\!\leq\!l\!<\!r\!\leq\!9\!\cdot\!10^{18}
提示:2520 ⁣= ⁣lcm(1,2,3...9)2520\!=\!lcm(1,2,3...9),所以根據一個數對25202520取模後的值可以判斷這個數是否整除1...91...9中的數


3.3.有一個物品重量爲ww,現在你有1,2,4,...,2n1,2,4,...,2^n重量的砝碼各一個,問有多少種方法可以使天平平衡,ww以二進制給出。(POJ3971)(POJ3971)
n ⁣ ⁣1000000,w ⁣ ⁣2nn\!\leq\!1000000,w\!\leq\!2^n
思考後,題意就是讓我們找一個xxyy,使得w ⁣+ ⁣x ⁣= ⁣y,x&y ⁣= ⁣0w\!+\!x\!=\!y,x\&y\!=\!0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章