引入

相信各位小学都学过容斥原理的三元版本,这里就不多赘述了。

模型

我们关注容斥原理的本质,其实就是求多个集合的并的大小。

令 $U$ 为全集,所有的 $S_i\subset U$。

下面把它拓展到 $n$ 元:

如果我们想求集合的交的大小,我们同样可以使用容斥原理,只需要套用下面的式子转化一下:

重点是将其拓展到更一般的方面:

  • 令 $U$ 为全集。
  • 有 $n$ 个性质 $P_i$ 和 $n$ 个集合 $S_i$。
  • $\forall x\in U$,$x$ 具有 $P_i$ 性质 $\Leftrightarrow x\in S_i$。

则有:

考察其意义。$\bigcap_{i=1}^n S_i$ 表示的是同时满足所有性质的元素数量,$\bigcap_{i=1}^k \overline{S_{a_i}}$ 表示的是 同时不满足性质 $P_{a_i}$ 的元素数量

注意到非常好的一点是,等式的两边都是集合的交。

下面看几个应用。

不定方程解数量

有 $n$ 个变量 $x_i$,每个变量有限制形如 $0\leq x_i\leq b_i$,求 $\sum_{i=1}^n x_i=m$ 的解数量,$n$ 较小。

构造容斥模型。

  • 我们把一组解 $(x_1,x_2,x_3,\cdots,x_n)$ 看做 $U$ 中的元素。
  • 考虑先去掉 $x_i\leq b_i$ 的限制,令 $U$ 等于所有满足 $\sum_{i=1}^n x_i=m$ 的解的集合。
  • 令性质 $P_i$ 为 $x_i\leq b_i$。

现在有了模型,直接套上容斥式子:

其中 $|U|$ 使用插板法可求得 $|U|=\binom{n+m-1}{n-1}$,现在考虑怎么求 $\sum_{|a|=k,a_i<a_{i+1}}|\bigcap_{i=1}^k \overline{S_{a_i}}|$。

考虑其实际意义:$\overline{S_{i}}$ 中的 $x$ 不满足 $x_{i}\leq b_{i}$,也就是 $x_i\geq b_i+1$。若让所有 $\overline{S_{i}}$ 并起来,就是说 $x_{a_i}\geq b_{a_i}$,其余的满足 $x_i\geq 0$。这就变成了有下界不定方程解数量,我们是会的,答案是 $\binom{m-\sum(b_{a_i}+1)+n-1}{n-1}$。

所以,综合起一个式子,答案就是:

朴素做,时间复杂度 $O(n2^n)$。

[HAOI2008] 硬币购物

一共有四种货币,面值是 $c_i$。$t$ 组询问,每次询问给你每种货币的数量和一个数 $s$,问用这些货币付 $s$ 块钱有多少种方案。

跟上面那个挺像的,是不是。直接构造容斥模型:

  • 我们把一组解 $(x_1,x_2,x_3,x_4)$ 看做全集 $U$ 中的元素。
  • 考虑先去掉上界的限制,令全集 $U$ 为所有满足 $\sum_{i=1}^4c_ix_i=s$ 的 $(x_1,x_2,x_3,x_4)$。
  • 令性质 $P_i$ 为 $x_i\leq d_i$。

还是先考虑全集 $U$ 是什么,是不是直接就是一个完全背包?

然后考虑怎么求后边那些,是不是就是某些货币有下界,有的没有?我们先把有下界那些强制选上,剩下的是不是又是一个完全背包?

令 $f_i$ 为四种货币无限量,付 $i$ 块钱的方案数,则答案就是:

直接做这个式子就好了。