容斥原理

Posted Aisaka_Taiga || 北烛青澜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容斥原理相关的知识,希望对你有一定的参考价值。

抽屉原理

或者说是鸽巢原理

它常用于证明存在性证明和求最坏情况下的解

\\(n+1\\) 个物体,划分为 \\(n\\) 组,那么有至少一组有两个及以上的物体

显然好吧

假设每一个分组有至多一个物体,那么最多有 \\(1\\times n\\) 个物体,而实际上我们是放了 \\(n+1\\) 个物体,显然需要把多出来的一个放到其中一个分组中,那样就出现了上述情况。

我们来推广到一般情况

\\(n\\) 个物体,划分为 \\(k\\) 组,那么至少存在一个分组,含有大于等于 \\(\\lceil \\fracnk \\rceil\\) 个物品

若每个分组含有小于 \\(\\lceil \\fracnk \\rceil\\) 个物体,则其总和 :

\\[s\\le (\\lceil \\fracnk \\rceil-1)\\times k=k\\lceil \\fracnk \\rceil-k<k(\\fracnk+1)-k=n \\]

矛盾,故得证。

容斥原理

引入

我们在学习统计集合之类的见过一类问题

假设班里有 \\(10\\) 名同学喜欢下棋,\\(15\\) 名同学喜欢游泳,\\(21\\) 名同学喜欢踢足球,求班里一共有多少名学生(每一名学生至少喜欢一项)

\\(10+15+21=46\\) 个吗?显然不是,因为有人可以同时喜欢两项,甚至三项都喜欢,这个时候我们的答案是不固定的。

我们用 \\(A,B,C\\) 表示下棋,游泳,踢足球的同学的集合,则学生总数是 \\(|A\\cup B\\cup C|\\) 。刚才说过,如果直接累加 \\(|A|,|B|,|C|\\) 有的元素会被重复统计,根据下图,我们需要扣去 \\(|A\\cap B|,|B\\cap C|,|C\\cap A|\\),但这样一来,中间一小部分多扣了,我们需要加回来,即 \\(|A\\cap B\\cap C|\\),所以我们最后得到:

\\[|A\\cup B\\cup C|=|A|+|B|+|C|-|A\\cap B|-|B\\cap C|-|C\\cap A|+|A\\cap B\\cap C| \\]

推广到一般情况。

定义

\\(U\\) 中元素有 \\(n\\) 中不同的属性,而第 \\(i\\) 种属性称为 \\(P_i\\),拥有属性 \\(P_i\\) 的元素构成集合 \\(S_i\\),那么:

\\[\\left | \\bigcup_i=1^n S_i \\right |=\\sum_i | S_i |-\\sum_i<j^|S_i\\cap S_j|+\\sum_i<j<k^|S_i\\cap S_j\\cap S_k|-\\ldots +(-1)^m-1\\sum_a_i<a_i+1^\\left | \\bigcap_i=1^mS_a_i \\right | +\\ldots +(-1)^n-1|S_1\\cap \\ldots \\cap S_n| \\]

即:

\\[\\left | \\bigcup_i=1^nS_i \\right |=\\sum_m=1^n(-1)^m-1\\sum_a_i<a_i+1\\left | \\bigcap_i=1^mS_a_i \\right | \\]

证明:

对于每一个元素使用二项式定理计算其出现的次数,对于元素 \\(x\\),假设他出现在 \\(T_1,T_2,\\ldots,T_m\\) 的集合中,那么他的出现次数为:

\\[Cnt=|\\T_i\\|-|\\T_i\\cap T_j|i<j\\|+\\ldots+(-1)^k-1\\left | \\left \\ \\bigcap_i=1^m T_a_i|a_i<a_i-1 \\right \\ \\right | +\\ldots+(-1)^m-1|\\T_1\\cap \\ldots \\cap T_m\\| \\]

\\[=\\binomm1-\\binomm2+\\ldots+(-1)^m-1\\binommm \\]

\\[=\\binomm0-\\sum_i=0^m(-1)^i\\binommi \\]

\\[1-(1-1)^m=1 \\]

于是每一个元素出现的次数为 \\(1\\),那么合并起来就是并集。

「总结」容斥原理

容斥原理。

最近被容斥虐惨了,要总结一下知识点和写一些题解。

 

 

 1.容斥原理

 

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

令$M$为$A$的集合。

$$\left|\bigcup\limits_i=1^nS_i\right|=\sum\limits_C\subseteq M^n(-1)^size(C)-1\left|\bigcap\limits_T\subseteq CT\right|$$

这个式子就是最重要的了。

所有的反演以及容斥系数的确定,原理都是他。这也是容斥原理是原理的原因。

 

证明的话。用二项式定理1-1就好了。

 

然后就是一道题。

很裸的容斥题。我当时很是不会做想了好久。

 

八。

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

题目要求求一个区间内能被八整除而不能被给定的几个数整除的数的个数(给定的数不超过20)

那么很显然的思路。

先求出能被八整除的数的个数,然后剪掉这些数里能被八整除而不能被给定的数整除的数的个数。

那么我们利用最上面那个式子。

首先枚举子集,然后用子集中的元素和八求出他们的最小共倍数,区间中能被这个最小共倍数整除的数的个数就是能被子集中的元素和八同时整除的数的个数,也就是所谓交集,代入上式求解。

这就是奇加偶减最经典的应用了。

 

一道题还是太少了。

还有一道题。

 

isn。

给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,

 

很久之前做的$dp$题,很经典的容斥与$dp$结合。

首先设$dp[i][j]$为长度为$i$,最后一个数的位置$j$的非降子序列个数,$g[i]=\sum\limits_j=i^ndp[i][j]$

$dp$数组用树状数组优化转移可以在$O(n^2logn)$做到。

那么我们已经的到了$g$数组了。

每种长度贡献的方案就是$A_n^i$

答案看似就是

$$ans=\sum\limits_i=1^ng[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)$

 

 

2.反演原理

 

以上是关于容斥原理的主要内容,如果未能解决你的问题,请参考以下文章

容斥原理

容斥原理

「总结」容斥原理

容斥原理

容斥原理--题

容斥原理学习笔记