「总结」容斥。三.广义容斥

首先让我们考虑反演的真正原理。

$fr.$反演原理

对于两个函数$f$和$g$。

我们知道:

$$g(n)=\sum\limits_{i=0}^{n}a_{n,i}f(i)$$

$$f(n)=\sum\limits_{i=0}^{n}b_{n,i}g(i)$$

将第一个式子代入第二个。

$$\begin{array}{rcl}\\f(n)&=&\sum\limits_{i=0}^{n}b_{n,i}\sum\limits_{j=0}^{i}a_{i,j}f(j)\\&=&\sum\limits_{j=0}^{n}f(j)\sum\limits_{i=j}^{n}a_{i,j}b_{n,i}\\&=&\sum\limits_{j=0}^{n}f(j)[n=j]\\ \end{array}$$

那么:

$$\sum\limits_{j=i}^{n}a_{i,j}b_{n,j}=[n=j]$$

设函数

$$c_{i,j}=[i=j]$$

那么:

$$\sum\limits_{j=i}^{n}a_{i,j}b_{n,j}=c_{n,j}$$

也就是所谓布尔表达式的提出。

这就是反演的真正原理了。

 

$se.$广义容斥

我所谓广义容斥不是二项式反演(二项式反演真也叫广义容斥),而是容斥原理的广义应用。

也就是容斥系数的构造。

我们发现上面那个式子,如果我们将$b$设为容斥系数,而已经得到了$a$和$c$,那么我们就可以解出来这样的系数$b$,在复杂度允许的情况下甚至可以高斯消元直接暴力求解。

复杂度不允许的情况下就需要反演的辅助了。

反演以一种既定的经典形式快速的求出容斥系数。

反演前面说的够多了。

实在不行打表找规律嘛。

 

$th.$系数构造

还是用最开始那种方法。我们求一个比较好求的数组$g$并且,这个$g$和我们需要的答案数组$f$有莫大的关系,我们就设:

$$ans=\sum\delta f$$

这个时候的$\delta$就是容斥系数了。

然后带入$g$求解。

 

另外一种方式是考虑每种方案被计入的次数。

设$m$为一种枚举方式,这个方案是$n$,某个方案满足的条件是$P$,需要满足的条件是$Q$。

$$\sum_ma_m\delta_m=[P(n)=Q]$$

简单的例子。

小学生一个班里有$A$个拿了语文$100$,$B$个数学100,$C$个英语100,$D$又有语文又有数学.....。

我们问至少有多少人拿了一个$100$。

发现$A,B,C,D,E,F$中用奇加偶减得到拿到$n$个100分的人被计算的次数就是:

$$\sum\limits_{i=1}^{n}\binom{n}{i}f(i)$$

我们需要的是:

$$\sum\limits_{i=1}^{n}\binom{n}{i}f(i)=[n>=1]$$

那么可以求出$f(i)=(-1)^{i-1}$。

证明:

等于$0$时显然成立。

$$\sum\limits_{i=1}^{n}\binom{n}{i}(-1)^{i-1}=\sum\limits_{i=0}^{n}\binom{n}{i}(-1)^{i-1}+1=0+1=1$$

如果要求至少拿了$m$次$100$的。

其实修改条件即可。

$$\sum\limits_{i=1}^{n}\binom{n}{i}f(i)=[n>=m]$$

高斯消元就可以解出。

时间复杂度不允许的情况下(大多数情况),我们期盼找到一种经典模型来适配它,利用反演得到容斥系数。

(说实话配系数挺恶心的)。

暂时这么多。

posted @ 2019-10-17 21:29  Lrefrain  阅读(315)  评论(0编辑  收藏  举报