zoukankan      html  css  js  c++  java
  • 【BZOJ3622】已经没有什么好害怕的了

    题目大意

    对于两个数列(a,b),求有多少种排列(p,q)满足(a_{p_i}>b_{q_i})的个数恰好为(k)

    题目分析

    由“恰好”引发思考。

    考虑容斥。

    设询问函数(q(i))表示钦定(i)(a>b)的关系的方案数。

    再设贡献函数(g(i))表示有i个(a>b)关系的方案对答案的贡献。

    再设容斥系数(f(i)),使得最终答案为(sum_{i=k}^nq(i)* f(i))

    首先考虑如何快速求出询问函数(q(i))。首先将两个数列分别排序。设(dp[i][j])表示(a)数列前(i)个数的匹配关系处理后,钦定了(j)对关系的方案数。设(pos)表示(b_{pos}<a_i)(pos)的最大值。显然有转移方程:

    (dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(pos-j+1))

    那么(q(i)=dp[n][i]* (n-i)!)就能快速求出了。

    再考虑求出容斥系数。

    根据套路,我们可以(O(n^2))递推这玩意儿。

    根据容斥原理,(g(x)=sum_{i=k}^xdbinom{x}{i}f(i))

    (x=k)时,(g(x)=1),那么显然(f(x)=1)

    (x>k)时,(g(x)=0),则有:

    (sum_{i=k}^xdbinom{x}{i}f(i)=0)

    (sum_{i=k}^{x-1}dbinom{x}{i}f(i)+f(x)=0)

    (f(x)=-sum_{i=k}^{x-1}dbinom{x}{i}f(i))

    这样我们就能递推求出容斥系数了。时间复杂度(O(n^2))

    update:还有二项式反演的方法。

    (f(i))表示关系恰好有(i)个的方案数。

    我们显然有:(q(x)=sumlimits_{i=x}^{n}dbinom{i}{x}f(i))

    二项式反演后得到:(f(x)=sumlimits_{i=x}^{n}(-1)^{i-x}dbinom{i}{x}q(i))

    就完了。

  • 相关阅读:
    AJAX
    JQUERY基础
    PHP 数据库抽象层pdo
    会话控制:session与cookie
    php 如何造一个简短原始的数据库类用来增加工作效率
    php 数据访问(以mysql数据库为例)
    面向对象设计原则
    php 设计模式 例子
    PHP中静态与抽象的概念
    键盘的按钮键名
  • 原文地址:https://www.cnblogs.com/Trrui/p/9971156.html
Copyright © 2011-2022 走看看