zoukankan      html  css  js  c++  java
  • 「总结」容斥。三.广义容斥

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

    $fr.$反演原理

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

    我们知道:

    $$g(n)=sumlimits_{i=0}^{n}a_{n,i}f(i)$$

    $$f(n)=sumlimits_{i=0}^{n}b_{n,i}g(i)$$

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

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

    那么:

    $$sumlimits_{j=i}^{n}a_{i,j}b_{n,j}=[n=j]$$

    设函数

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

    那么:

    $$sumlimits_{j=i}^{n}a_{i,j}b_{n,j}=c_{n,j}$$

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

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

    $se.$广义容斥

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

    也就是容斥系数的构造。

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

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

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

    反演前面说的够多了。

    实在不行打表找规律嘛。

    $th.$系数构造

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

    $$ans=sumdelta f$$

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

    然后带入$g$求解。

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

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

    $$sum_ma_mdelta_m=[P(n)=Q]$$

    简单的例子。

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

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

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

    $$sumlimits_{i=1}^{n}inom{n}{i}f(i)$$

    我们需要的是:

    $$sumlimits_{i=1}^{n}inom{n}{i}f(i)=[n>=1]$$

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

    证明:

    等于$0$时显然成立。

    $$sumlimits_{i=1}^{n}inom{n}{i}(-1)^{i-1}=sumlimits_{i=0}^{n}inom{n}{i}(-1)^{i-1}+1=0+1=1$$

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

    其实修改条件即可。

    $$sumlimits_{i=1}^{n}inom{n}{i}f(i)=[n>=m]$$

    高斯消元就可以解出。

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

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

    暂时这么多。

  • 相关阅读:
    如何使用Flannel搭建跨主机互联的容器网络
    移动端——touch事件
    Javascript 模块化指北
    vue重构--H5--canvas实现粒子时钟
    redux-saga框架使用详解及Demo教程
    前端代码编写规范
    探秘JS的异步单线程
    POJ 3714 Raid 近期对点题解
    EditText把回车键变成搜索
    Swift语言概览
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11691060.html
Copyright © 2011-2022 走看看