「总结」容斥。三.广义容斥
首先让我们考虑反演的真正原理。
$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]$$
高斯消元就可以解出。
时间复杂度不允许的情况下(大多数情况),我们期盼找到一种经典模型来适配它,利用反演得到容斥系数。
(说实话配系数挺恶心的)。
暂时这么多。