容斥原理
容斥原理经常用于许多常见计数问题,往往在普通计数问题上加上某些限制。比如要求n个元素都要满足某种限制。于是我们考虑钦定有0个元素不满足(除了这0个钦定外,剩下元素随意,本质上就是所有元素都任意),减去钦定有1个元素不满足的方案数,加上钦定有2个元素不满足方案数……所求即为所有元素都满足的方案数。容斥系数只需记住第一个必须是1,剩下的就-1 1交替即可。
不定方程非负整数解计数
求解约束方程的整数解个数:x1 + x2 + x3 = 11
( x1, x2, x3 为非负整数,且 x1 <= 3,x2 <= 4,x3 <= 6 )

通过比较简单的例题就可以大概感受到容斥原理是什么样子。下面考虑推广到n更大的情况。
给出不定方程 \(\sum_{i=1}^{n} x_{i}=m\) 和 \(n\) 个限制条件 \(x_{i} \leq b_{i}\) ,其中 \(m, b_{i} \in \mathbb{N}\) .求方程的非负整数解的个数.
没有限制时
如果没有 \(x_{i} \leq b_{i}\) 的限制,那么不定方程 \(\sum_{i=1}^{n} x_{i}=m\) 的非负整数解的数目为 \(\binom{m+n-1}{n-1}\) .
略证:插板法.
相当于你有 \(m\) 个球要分给 \(n\) 个盒子,允许某个盒子是空的.这个问题不能直接用组合数解决.
于是我们再加入 \(n-1\) 个球,于是问题就变成了在一个长度为 \(m+n-1\) 的球序列中选择 \(n-1\) 个球,然后这个 \(n-1\) 个球把这个序列隔成了 \(n\) 份,恰好可以一对应放到 \(n\) 个盒子中.那么在 \(m+n-1\) 个球中选择 \(n-1\) 个球的方案数就是 \(\binom{m+n-1}{n-1}\) .

一般情况
接着我们尝试抽象出容斥原理的模型:
1.全集 U:不定方程 \(\sum_{i=1}^{n} x_{i}=m\) 的非负整数解
2.元素:变量 \(x_{i}\) .
3.属性: \(x_{i}\) 的属性即 \(x_{i}\) 满足的条件,即 \(x_{i} \leq b_{i}\) 的条件
目标:所有变量满足对应属性时集合的大小,即 \(\left|\bigcap_{i=1}^{n} S_{i}\right|\) .
这个东西可以用 \(\left|\bigcap_{i=1}^{n} S_{i}\right|=|U|-\left|\bigcup_{i=1}^{n} \overline{S_{i}}\right|\) 求解. \(|U|\) 可以用组合数计算,后半部分自然使用容斥原理展开.
那么问题变成,对于一些 \(\overline{S_{a_{i}}}\) 的交集求大小.考虑 \(S_{a_{i}}\) 的含义,表示 \(x_{a_{i}} \geq b_{a_{i}}+1\) 的解的数目.而交集表示同时满足这些条件.因此这个交集对应的不定方程中,有些变量有下界限制,而有些则没有限制.
能否消除这些下界限制呢?既然要求的是非负整数解,而有些变量的下界又大于 0 ,那么我们直接把这个下界减掉,就可以使得这些变量的下界变成 0,即没有下界啦.因此对于
的不定方程形式为
于是这个也可以组合数计算啦.这个长度为 \(k\) 的 \(a\) 数组相当于在枚举子集.
解的个数 :
由于容斥的过程相当于枚举 \(\{1, \ldots, n\}\) 的子集,因此直接计算的复杂度是 \(O(2^n)\) .

浙公网安备 33010602011771号