容斥原理
容斥原理
原理
引入 首先我们来看一个小学生的问题:
一个班中,学习日语的有 \(a\) 人,学习俄语的有 \(b\) 人,学习两科的有 \(c\) 人,求至少学了一门外语的人数有几人。
答案很明显,为 \(a+b-c\)。
容斥原理
证明:
对于元素 \(a\),假设 \(a\) 在上式子拆开后有 \(x\),有且仅有 \(m\) 个 \(A_i\) 集合包含 \(a\)。
那么右式中的贡献为:
我们可以构造一个式子:
对它使用二项式展开:
于是:
反之,亦然。证毕。
例题
例1.
若 \(\sum x_i=m,x_i\in \mathbb{N}\),求 \(x_i\) 取值的方案数。
\((1)\) 对 \(x_i\) 无限制
则就是小球与挡板的问题。
共 \(\Large{m+n-1\choose m}\) 种方案。
\((2)\) 若 \(x_i\le b_i\)
我们定义 \(get(n,m)=\Large{m+n-1\choose m}\)。
用 \(S_i\) 表示 \(x_i\ge b_i+1\) 的所有方案集合。
很明显,求的就是 \(|\displaystyle{\bigcup_{i=1}^n} S_i|\),容斥原理秒掉。
现在需要思考的问题是,如何求 \(|\displaystyle{\bigcap_{i\in S} S_i}|\)。
把它展开,就是求 \(\displaystyle\sum_{i=1}^n x_i=0\) 且其中\(x_i\ge b_i\),这不很简单吗,就是 \(get(n,m-\displaystyle\sum_{i\in S}(b_i+1))\)。
\((3)\) 若 \(x_i\le b\)
这是更简单的,因为每一次减的数都一样,所以答案就为:
\((4)\) \(x_i\le b_i\) DP 做法
例5. 欧拉函数
定义:\(\varphi(n)\) 表示 \(1\sim n\) 中与 \(n\) 互质的数的个数。这个函数叫做欧拉函数。求 \(\varphi(n)\) 的展开式。
例6. 广义容斥原理
容斥原理常用于集合的计数问题,而对于两个集合的函数 \(f(S),g(S)\),
证明
接下来我们简单证明一下。我们从等式的右边开始推:
我们发现后半部分的求和与 \(Q\) 无关,因此把后半部分的 \(Q\) 剔除:
记关于集合 \(P\) 的函数 \(F(P)=\sum_{T\subseteq P}(-1)^{|P|-|T|}\),并化简这个函数:
因此原来的式子的值是
分析发现,仅当 \(|S\setminus Q|=0\) 时有 \(0^0=1\),这时 \(Q=S\),对答案的贡献就是 \(g(S)\),其他时侯 \(0^{|S\setminus Q|}=0\),则对答案无贡献。于是得到
综上所述,得证。
推论
该形式还有这样一个推论。在全集 \(U\) 下,对于函数 \(f(S),g(S)\),
这个推论其实就是补集形式,证法类似。

浙公网安备 33010602011771号