
在这一章中,我们将会简要介绍容斥原理以及其在计数中的应用。
想必大家对于容斥原理这个词语及其含义都已经十分熟悉,故我们将着重于介绍其如何应用以及一些重要的实例。对很多看似无从下手的组合计数问题利用容斥原理往往会变得意想不到的简单。
在后文中,我们总是用





定理(容斥原理)

我们以往对于容斥原理的证明大多基于数学归纳法。但是事实上,我们可以利用贡献法:分别分析满足条件的元素与不满足条件的元素对于等式两端的贡献。
对于容斥原理而言,我们在


如果





否则,

















最终,我们得到对于等式右侧贡献为


要利用容斥原理解决组合计数问题通常需要我们对于若干个性质进行构造,使得我们需要求解的目标元素等价于不满足所有性质

例:求多重集

解:
注意到:无穷多重集的组合数是易于求解的。
即如果我们的问题是:求多重集

由笔记(一)中结论立马得到:方法数为

那么:我们想到将无穷多重集中每个元素的个数进行限制就可以得到一个有穷多重集!
所以我们定义性质:(此处特别注意:我们要使得要求解的计数问题与所有性质都不满足的问题等价)












那么原问题的方法数

下面我们只需要分别计算

显然








故




同理地,得到

对于







同理,求得

故最终解答为

这告诉我们:容斥原理看似简单朴素,但是却可以用来解决我们之前需要借助生成函数才能够普遍解决的有限多重集的组合问题,其威力是巨大的!
然而,我么上面所陈述的容斥原理的适用范围还是太狭窄了一些。
如果我们想解决的问题是求出恰好满足

我们假设




那么一个显然的结果是:

设


交换求和顺序,得到:

故:

再次进行生成函数展开,系数对应相等,可以得到:
恰好满足


其中


对于上述容斥原理的推广形式,我们自然也可以利用贡献法来进行证明。
若一个





若元素




若元素











经过化简,可以得到:

故利用贡献法,我们也能证明这一容斥原理的推论,但是生成函数的方法能够更清晰地向我们展示这一推论被提出的过程与动机。
最后我们举两个例子来结束对于容斥原理在计数中的应用的介绍。
例:(全错位排列数)在生成函数部分,我们曾经利用全错位排列数的递推公式结合生成函数的性质很容易地求得了全错位排列数,在此我们试着利用容斥原理给出另一种做法
解:
定义集合



定义性质:





则我们所求全错位排列数

显然性质


那么

而



同理,

故得到:

将组合数全都按照定义展开,与相乘的阶乘约去后得到:

另一个例子是关于有限制条件的排列数的。
例:

解:假设有

则同样地,定义全集



定义性质


则

显然性质


那么

而



同理,

故得到:

(话说感觉容斥原理的题目一般处理手法都比较简单,还是不列习题了吧2333
(其实就是懒2333