• 原创 动态卷积


    Pro:
    给定数组(f_x)
    (g_n=C(n+k,k))
    要求动态维护f和g的卷积h
    支持以下操作
    1.修改f的某一项
    2.查询h的某一项

    [\ ]

    k为常数且<=20,n,m<=100000
    Sol:

    [egin{align*} ans&=sum_{i=1}^n f_i * C(n-i+k,k)\ &=sum_{i=1}^n f_i * sum_{j=0}^k*C(-i,j)*C(n+k,k-j) (广义的组合恒等式?)\ &=sum_{j=0}^k C(n+k,k-j) sum_{i=1}^n f_i*C(-i,j)\ &这里 n<0时 C(n,m)=frac{n*(n-1)*...*(n-m+1)}{m!}=(-1)^m*C(|n|+m-1,m) end{align*} ]

    因此只需要用k个树状数组去维护最后那个式子的前缀和即可

    Sol:
    由这个题,我们可以衍生出这样一个关于组合数的恒等式

    [egin{align*} &C(n,m)=sum_{i=0}^m C(n+k,m-i)*C(k+i-1,i)*(-1)^i\ &k为>=1的常数 end{align*} ]

    学校里的学长给了另一个更为自然的做法

    [egin{align*} ans&=sum_{i=1}^n f_{n-i}*C(i+k,k)\ &=frac{1}{k!}sum_{i=1}^n f_{n-i}*(i+1)^{overline{k}}\ &=frac{1}{k!}sum_{i=1}^n f_{n-i}*sum_{j=0}^k S[k,j]*(i+1)^j\ &=frac{1}{k!}sum_{j=0}^k S[k,j]*sum_{i=1}^n f_{n-i}*(i+1)^j\ &=frac{1}{k!}sum_{j=0}^k S[k,j]*sum_{i=1}^n f_{i}*(n+1-i)^j\ &=frac{1}{k!}sum_{j=0}^k S[k,j]*sum_{i=1}^n f_{i}*sum_{t=1}^j C(j,t)*(-i)^t*(n+1)^{j-t}\ &=frac{1}{k!}sum_{j=0}^k S[k,j]*sum_{t=1}^j C(j,t)*(n+1)^{j-t} sum_{i=1}^n f_{i}*(-i)^t\ end{align*} ]

    也是树状数组维护即可

  • 相关阅读:
    HIFU控制器的显示板
    风扇控制板
    直流源控制板
    HIFU的心脏
    强劲的全桥驱动
    脑电模块
    另一个12导联心电模块
    数据处理,pandas方面遇到的问题
    6.13 django
    python 零基础学习之路-06 常用模块
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/13850652.html
Copyright © 2020-2023  润新知