计数学习小记
前言
閑的無(wú)聊懶得做題不如來(lái)水點(diǎn)博客。
雖然一直作為一個(gè)感性做題的選手,但是理性層面上確實(shí)是分析題目初步做法的一個(gè)十分重要的方法。
額不會(huì)涉及具體的知識(shí)點(diǎn),只是總結(jié)點(diǎn)自己做題的時(shí)候遇到的比較巧妙的方法。
混沌排版請(qǐng)見諒
還有我也很菜有錯(cuò)誤或者不完善的地方見諒/kk
(Polya以后再更新)
文章目錄
- 前言
- 正題
- 基本方法
- 不重
- 容斥
- 尋找基準(zhǔn)
- 模型轉(zhuǎn)換
- 奇偶染色
- 組合數(shù)→\rightarrow→矩陣乘法
- 期望X計(jì)數(shù)
- 冪次
- 統(tǒng)計(jì)
- 好題
正題
基本方法
計(jì)數(shù)的基本方法來(lái)說(shuō)的話大致能總結(jié)為幾類
- dp
- 組合數(shù)學(xué)
- 多項(xiàng)式
- 其他
dpdpdp應(yīng)該是比較早接觸也是花樣最多的一類方法,一般需要考慮到狀態(tài)的設(shè)立和優(yōu)化,方程的轉(zhuǎn)移等部分。
組合數(shù)學(xué)的話主要通過(guò)找出題目的組合意義或者推式子得到。
而多項(xiàng)式一般都是需要使用生成函數(shù),也有可能是簡(jiǎn)單的卷積。
然而除了上面常見的計(jì)數(shù),存在一些其他靈活性的方法,這類的題目一般都能夠?qū)⒄w的計(jì)數(shù)問(wèn)題分散到一些小的統(tǒng)計(jì)上:比如說(shuō)SAM進(jìn)行子串計(jì)數(shù)的過(guò)程。
當(dāng)然也有可能是假計(jì)數(shù)(比如實(shí)際上可能合法的方案數(shù)能夠枚舉完的)。
不過(guò)這里不會(huì)贅述上面的幾種方法,因?yàn)檫@只是個(gè)總結(jié)經(jīng)驗(yàn)的水博客,不是教人計(jì)數(shù)的博客。
不重
重復(fù)問(wèn)題應(yīng)該是在正常的計(jì)數(shù)中最容易遇到的問(wèn)題,統(tǒng)計(jì)重復(fù)的方案對(duì)做法造成的影響很大,比如來(lái)說(shuō):
- 無(wú)標(biāo)號(hào)計(jì)數(shù):這種一般來(lái)說(shuō)這種是很難的問(wèn)題,因?yàn)橐话愕挠?jì)數(shù)都需要有一個(gè)基準(zhǔn),而這很經(jīng)常是標(biāo)號(hào)。
- 統(tǒng)計(jì)的不是形成方案的方法,而是方案:很多的生成方法是會(huì)生成重復(fù)的方案的,當(dāng)然這個(gè)生成方法可能是你自己決定的或者題目給出的。
比較常見的應(yīng)該就這兩種情況了,當(dāng)我們的計(jì)數(shù)出現(xiàn)重復(fù)的時(shí)候就需要考慮換方法來(lái)去掉重復(fù)或者不計(jì)重復(fù)的部分。
容斥
啊又是一個(gè)很大的專題,當(dāng)然容斥是有兩種作用的,一種是來(lái)去掉重復(fù),一種是保證限制的合法。
比如經(jīng)典的錯(cuò)排問(wèn)題:
我們可以枚舉我們至少有多少個(gè)位置是不合法的(設(shè)為kkk個(gè)),那么不合法的位置就固定了,答案就是
∑k=1n(nk)(?1)k(n?k)!\sum_{k=1}^n\binom{n}{k}(-1)^k(n-k)!k=1∑n?(kn?)(?1)k(n?k)!
不難發(fā)現(xiàn)容斥的一個(gè)好處是我們不需要去統(tǒng)計(jì)恰好,而是去固定一些至少,這樣可以去掉一些麻煩的限制,這是一個(gè)很常見的用處。
容斥還有一個(gè)好處是我們的容斥系數(shù)可以直接乘在方案中以節(jié)省很多的狀態(tài)(dpdpdp來(lái)說(shuō))。
比如以題目[ARC101C] Ribbons on Tree來(lái)說(shuō):
nnn個(gè)點(diǎn)之間兩兩配對(duì),要求配對(duì)點(diǎn)之間的路徑覆蓋整棵樹,求方案數(shù)對(duì)109+710^9+7109+7取模
1≤n≤50001\leq n\leq 50001≤n≤5000
額看看我們的限制,每條邊都被覆蓋至少一次,那么我們?nèi)莩鈦?lái)說(shuō)就是如果欽定kkk條邊不能被覆蓋,容斥系數(shù)就是(?1)k(-1)^k(?1)k。
我們暴力切斷不需要覆蓋的邊,那么設(shè)fi,j,kf_{i,j,k}fi,j,k?表示以iii為根的子樹中目前聯(lián)通塊大小為jjj,已經(jīng)切斷了kkk條邊時(shí)的方案。
顯然的切斷一條邊的時(shí)候容斥系數(shù)成了個(gè)?1-1?1,那么我們完全沒(méi)有必要用狀態(tài)記錄它,而是直接維護(hù)目前的方案×容斥系數(shù)的和狀態(tài)就縮成兩維了。
至于很多的反演我認(rèn)為這不需要在此篇中過(guò)多介紹。
尋找基準(zhǔn)
基準(zhǔn)是一個(gè)計(jì)數(shù)中不可或缺的東西。
拿最簡(jiǎn)單的過(guò)河卒問(wèn)題來(lái)講,我們?cè)儐?wèn)的兵的路線數(shù)量實(shí)際上是一個(gè)絕對(duì)的空間和時(shí)間(也就是走的順序)的路徑。
如果問(wèn)題可以變?yōu)樵儐?wèn)過(guò)河卒的路徑能有多少種不同的形狀(旋轉(zhuǎn)或者鏡像得到的也算重復(fù)),那么就是去掉了部分的基準(zhǔn)。
而有的問(wèn)題中基準(zhǔn)并不會(huì)明顯的給出,所以可能正常的計(jì)數(shù)會(huì)導(dǎo)致大量的重漏,此時(shí)我們需要尋找一個(gè)好的基準(zhǔn)來(lái)計(jì)數(shù)。
拿無(wú)標(biāo)號(hào)有根數(shù)的計(jì)數(shù)來(lái)講,我們不會(huì)算重的原理就是說(shuō)我們將所有的子樹按照一定的規(guī)律進(jìn)行了排序,此時(shí)就是確定了一個(gè)基準(zhǔn)。
例題的話可以看P7888。
模型轉(zhuǎn)換
一個(gè)很大的話題,大部分的難的計(jì)數(shù)題都是會(huì)有一些十分復(fù)雜的條件的,需要找到一個(gè)比較簡(jiǎn)單的條件來(lái)替換掉原來(lái)的條件。
當(dāng)然的變換之后不可避免地會(huì)有按照新的條件來(lái)計(jì)的話算重的可能性,此時(shí)就需要具體分析了。
奇偶染色
比如[AGC040C]Neither AB nor BA:
一個(gè)包含A,B,CA,B,CA,B,C的序列,每次可以選擇相鄰的兩個(gè)除了ABABAB和BABABA的刪去。
求有多少個(gè)長(zhǎng)度為NNN的序列可以刪完。
1≤N≤1071\leq N\leq 10^71≤N≤107
經(jīng)典的奇偶染色,把偶數(shù)位置的取反就變?yōu)榱藙h除AA/BBAA/BBAA/BB然后就很好統(tǒng)計(jì)了。
組合數(shù)→\rightarrow→矩陣乘法
最經(jīng)典的應(yīng)該是https://www.luogu.com.cn/problem/P3746
求
(∑i=0∞(nkik+r))%p\left(\sum_{i=0}^\infty \binom{nk}{ik+r}\right)\% p(i=0∑∞?(ik+rnk?))%p
1≤n≤109,0≤r<k≤501\leq n\leq 10^9,0\leq r<k\leq 501≤n≤109,0≤r<k≤50
其實(shí)就是在nknknk個(gè)物品中選出xxx個(gè)物品,要求x%k=rx\%k=rx%k=r,直接矩陣乘法即可。
而大部分問(wèn)題可以將組合意義和dp相互轉(zhuǎn)換來(lái)轉(zhuǎn)換成快速的矩陣乘法。
期望X計(jì)數(shù)
有限的期望題都是計(jì)數(shù)
?\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -???????????????????????????????????不是我就對(duì)了
但是有時(shí)候運(yùn)用期望的思想會(huì)讓問(wèn)題更加的簡(jiǎn)單。
當(dāng)然一般這種時(shí)候正常的計(jì)數(shù)也是可行的,只不過(guò)一般來(lái)說(shuō)在每一步的總方案數(shù)不確定但是概率能確定的情況下我們不妨先算出期望再乘上總共的方案數(shù)就能得到答案。
原本有道例題的,但是找不到了/cy
冪次
有時(shí)候我們會(huì)需要統(tǒng)計(jì)答案冪次的和,假設(shè)是nkn^knk,我們可以將轉(zhuǎn)換為在nnn個(gè)數(shù)中選出有序可重的kkk個(gè)數(shù),此時(shí)我們就將一個(gè)冪次的問(wèn)題轉(zhuǎn)換為了一個(gè)較為復(fù)雜的計(jì)數(shù)。
如[NOI2009]管道取珠
給出一個(gè)大小為nnn和一個(gè)大小為mmm的棧,每次選擇一個(gè)棧彈出棧頂然后記錄這個(gè)字母,求所有彈出序列的彈出方案的二次方和。
1≤n,m≤5001\leq n,m\leq 5001≤n,m≤500
方案的平方可以視為兩個(gè)人選出同一個(gè)序列的方案。
然后dpdpdp轉(zhuǎn)移即可。
統(tǒng)計(jì)
有的時(shí)候計(jì)數(shù)題不僅需要統(tǒng)計(jì)方案數(shù),而是每個(gè)方案下某個(gè)值的和。
此時(shí)我們一般有以下解決方案
- 使用dpdpdp統(tǒng)計(jì):考慮方程是否會(huì)存在讓某個(gè)狀態(tài)的所有方案的加值的情況,那么此時(shí)需要額外記錄一個(gè)方案數(shù)的數(shù)組。
- 組合意義考慮:比如上面的冪次小結(jié)中便是用組合意義轉(zhuǎn)化為了一般計(jì)數(shù)題。
- 單獨(dú)考慮單個(gè)東西產(chǎn)生的貢獻(xiàn)。
好題
不知道寫啥了記些好題罷
- P6499-[COCI2016-2017#2]Burza
- 51nod1667-概率好題
- 51nod1597-有限背包計(jì)數(shù)問(wèn)題
- [AGC013E]Placing Squares
- CF1286D-LCC
總結(jié)
- 上一篇: P5327-[ZJOI2019]语言【线
- 下一篇: UOJ#351-新年的叶子【树的直径,数