zoukankan      html  css  js  c++  java
  • 【题解】[USACO19DEC]Tree Depth

    题目链接

    明摆着是一道计数题,计数题能用些啥?dp?我不会拦你的。多项式?生成函数?没错,这道题就是生成函数。

    难发现,深度=祖先数+1,而$i$是$j$的祖先,当且仅当对任意在$i$和$j$之间的整数$k$,均满足$a_i<a_k$。

    设$f_{|i-j|,k}$表示$i$是$j$的祖先时,逆序对数为$k$的方案数,则其生成函数

    [ LARGE F_{|i-j|}(x)=egin{cases}prod_{t=0,t eq j-i}^{n-1}sum_{p=0}^tx^p(i<j)\x^{i-j}prod_{t=0,t eq i-j}^{n-1}sum_{p=0}^tx^p(i>j)end{cases} ]

    方法:考虑先往序列里面插入所有下标在$i$到$j$之间的数(不含$i$),共$|i-j|$个数,再插入$a_i$,再插入剩下的数。

    然后,

    [ LARGE F_{|i-j|}(x)=egin{cases}frac{prod_{t=1}^nfrac{1-x^t}{1-x}}{frac{1-x^{j-i}}{1-x}}(i<j)\x^{i-j}frac{prod_{t=1}^nfrac{1-x^t}{1-x}}{frac{1-x^{i-j}}{1-x}}(i>j)end{cases} ]

    先求出$prod_nfrac{1-xt}{1-x}$,再乘或除$1-x^p$就可以得到$F_p(x)$,取第$k$项和第$k-p$项系数。

    注意:用$ ext(会)color{ ext}$,可以暴力乘或除。

  • 相关阅读:
    单词统计
    意见汇总
    项目评审结果
    注册表键值
    C++ 创建快捷方式
    XPosed 示例
    直播流程
    C++隐藏任务栏图标
    C++ 屏幕录制
    DUILIB UI创建过程
  • 原文地址:https://www.cnblogs.com/ztc03/p/12364449.html
Copyright © 2011-2022 走看看