「總結」容斥。一.容斥原理


容斥原理。

最近被容斥虐慘了,要總結一下知識點和寫一些題解。

 

 

 一.容斥原理

 

首先是很熟悉的奇加偶減的式子。

令$M$為$S$的集合。

$$\left|\bigcup\limits_{i=1}^{n}S_i\right|=\sum\limits_{C\subseteq M}^{n}(-1)^{size(C)-1}\left|\bigcap\limits_{T\subseteq C}T\right|$$

這個式子就是最重要的了。

所有的反演以及容斥系數的確定,原理都是他。這也是容斥原理是原理的原因。

 

證明的話。用二項式定理$(1-1)^n$就好了。

 

然后就是一道題。

很裸的容斥題。我當時很是不會做想了好久。

 

$fr.$八。

最重要的容斥思想之一,補集容斥。

題目要求求一個區間內能被八整除而不能被給定的幾個數整除的數的個數(給定的數不超過20個)

那么很顯然的思路。

先求出能被八整除的數的個數,然后剪掉這些數里能被八整除又能被給定的數整除的數的個數。

那么我們利用最上面那個式子。

首先枚舉子集,然后用子集中的元素和八求出他們的最小共倍數,區間中能被這個最小共倍數整除的數的個數就是能被子集中的元素和八同時整除的數的個數,也就是所謂交集,代入上式求解。

這就是奇加偶減最經典的應用了。

 

一道題還是太少了。

還有一道題。

 

$se.$isn。

給出一個長度為n的序列A(A1,A2...AN)。如果序列A不是非降的,你必須從中刪去一個數, 這一操作,直到A非降為止。求有多少種不同的操作方案,

 

很久之前做的$dp$題,很經典的容斥與$dp$結合。

首先設$dp[i][j]$為長度為$i$,最后一個數的位置$j$的非降子序列個數,$g[i]=\sum\limits_{j=i}^{n}dp[i][j]$

$dp$數組用樹狀數組優化轉移可以在$O(n^2logn)$做到。

那么我們已經的到了$g$數組了。

每種長度貢獻的方案就是$A_n^i$

答案看似就是

$$ans=\sum\limits_{i=1}^{n}g[i](n-i)!$$

其實不然。

因為這個序列不可能以各種順序刪除而不會在長度為$i+1$的時候變為非降的,如果變成了,那么就不能刪掉最后一個了。那么要剪掉沒一個序列在長度為$len+1$的時候就變為非降的貢獻。

所以:

$$ans=\sum\limits_{i=1}^{n}(g[i](n-i)!-g[i+1](n-i-1)!(i+1))$$

復雜度$O(n^2logn)$

 

$th.$卡農

之前甚至忘記了這道好題了啊。

想當年在沒開網的時候我剛了3天做出來還是很自豪的。

化簡題意:對於一個給定的集合$S={1...n}$,選取其中$m$個子集要求子集非空,不能相同,並且每個出現過的元素出現次數是偶數。

一開始推組合,發現根本不可做,一直推不出來把我惡心的要命。

之后想到可不可以用有序來做,最后除一個階乘就行了。

前$m-1$段確定的時候第$m$段就已經唯一確定了(補之前的奇數次元素就完事了)。

設$dp[i]$為前$i$個集合的合法情況。這個時候確定$i-1$個集合的總方案數就是$A_{2^n-1}^{i-1}$很顯然這只滿足了偶數次的條件,還要剪掉其他不合法情況。

兩種不合法。

1.最后一個集合也就是第$i$個是空的,那么前$i-1$個就已經是合法的了,這部分貢獻就是$dp[i-1]$

2.重復了。我們另外拿出那個重復的集合,那么剩下的部分就只有$i-2$個集合了。

那么重復的集合的種類就是$2^n-1-(i-2)$枚舉這個集合所在的位置,那么有$i-1$種情況。

所以得到遞推式。

$$dp[i]=A_{2^n-1}^{i-1}-dp[i-1]-dp[i-2](2^n-1-(i-2))(i-1)$$

$$ans=dp[m]$$

 

$fo.$國際影星

裝壓容斥。

T2.

看一下數據范圍:猜一下是$O(3^n)$

子集題我首先考慮了子集反演。

設$g[S]$為交集是$S$的子集情況下的方案數,$f[S]$是恰好的方案數。

$$g[S]=\sum\limits_{T\subseteq S}f[T]$$

反演得到。

$$f[S]=\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}g[T]$$

發現根本不可做,因為交集是子集的集合根本算不出來。

考慮補集容斥。

那么我們需要讓兩個點能到的點沒有交集即可。

因為兩個點必然有自己能到的范圍,所以枚舉到達集合,然后讓兩個集合之間沒有交點就可以了。

考慮構造這樣兩個集合,並算出方案。

$dp[S]$讓$1$到達$S$中的點的方案數。

$g[S]$讓$2$到達的方案數。

預處理數組$e[S]$為$S$中的邊數。

設$mx$為全集。

枚舉$1$所在的集合$T$得到:

$$dp[S]=2^{e[S]}-\sum\limits_{T\subseteq S}dp[T]2^{e[S\ xor\ T]}$$

$g$的轉移也類似。

在統計答案的時候,枚舉全集的子集$S$,同時枚舉$S$補集的子集,同樣原理轉移即可。

$$ans=2^{e[mx]}-\sum\limits_{S\subseteq mx}\sum\limits_{T\subseteq mx\ xor\ S}dp[S]g[T]2^{e[mx\ xor\ S\ xor\ T]}$$

復雜度是$O(3^n)$

 

和wmz的暴力對拍結果,n=8,m=22。

 

暫時就這么多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM