zoukankan      html  css  js  c++  java
  • 杂题

    题意

    给定网格图上(n)个起点,其对应(n)个终点
    路径只允许往上或往左,需要路径各不相交(点相交),求方案数
    保证:第(i)个起点为((a_i,0)),第(i)个终点为((0,i))
    (n,a_ile 10^6)

    做法

    处理DAG路径不交问题我们通常会想到Lindström–Gessel–Viennot lemma

    proof

    [M=egin{pmatrix} {a_1+1choose 1}&{a_1+2choose 2}&{a_1+3choose 3}&cdots&{a_1+nchoose n}\ {a_2+1choose 1}&{a_2+2choose 2}&{a_2+3choose 3}&cdots&{a_2+nchoose n}\ vdots&vdots&vdots&ddots&vdots\ {a_n+1choose 1}&{a_n+2choose 2}&{a_n+3choose 3}&cdots&{a_n+nchoose n} end{pmatrix}]

    我们就是要求(|M|)

    我们将({a_i+jchoose j})写成(frac{1}{j!}(a_i+1)^{overline{j}})的形式
    把每列的(frac{1}{j!})提出来后,((a_i+1)^{overline{j}}=sumlimits_{k=0}^j left[ j atop k ight](a_i+1)^k)
    将其看作((a_i+1))的多项式,每列的系数是相同的,故对这个矩阵做初等变换,能化成一个很优美的形式

    [M'=egin{pmatrix} (a_1+1)^1&(a_1+1)^2&(a_1+1)^3&cdots&(a_1+1)^n\ (a_2+1)^1&(a_2+1)^2&(a_2+1)^3&cdots&(a_2+1)^n\ vdots&vdots&vdots&ddots&vdots\ (a_n+1)^1&(a_n+1)^2&(a_n+1)^3&cdots&(a_n+1)^n end{pmatrix}]

    我们在每一行提出一个((a_i+1))后,这是Vandermonde matrix
    求行列式有个很优美的公式

    通过上述过程,我们最终求的东西为

    [prodlimits_{i=1}^n frac{1}{i!}prodlimits_{i=1}^n (a_i+1)prodlimits_{1le i<jle n}(a_j-a_i) ]

    我们可以卷积求出后面(k=a_j-a_i)出现的次数,由于我们在求幂,故应对(phi(mod))取模
    (a_i=a_j)(|M|=0),可特判掉
    (k=a_j-a_i)出现的次数是(O(n))级别的,直接对(mod)取模即可

  • 相关阅读:
    C++结构体中sizeof
    sizeof()的用法
    XStream和Json
    省市联动
    ajax
    配置文件的读取
    JSP标签库
    字符串函数参数传入传出(去空格)
    字符串函数参数传入传出(字符串反转)
    opendir,readdir,closedir
  • 原文地址:https://www.cnblogs.com/Grice/p/14187527.html
Copyright © 2011-2022 走看看