• 「loj


    link。


    https://codeforces.com/blog/entry/76447 里面抄一个代数做法。

    考虑朴素 dp:记 (f_{i, j} = f_{i - 1, j} + (j + a_i) imes f_{i - 1, j - 1}),不太好做。

    做变换 (g_{i, j} = f_{i, i - j}),并记 (b_i = a_i + i),则有 (g_{i,j} = g_{i - 1, j - 1} + (b_i - j) imes g_{i - 1, j})

    其对应的 OGF 满足 (G_i = x(G_{i - 1} - G'_{i - 1}) + b_iG_{i - 1})

    根据高中数学,我们可以构造 (H_i = G_ie^{-x}),则有 (H_i = b_iH_{i-1} - xH'_{i-1})

    注意算子 (vartheta = xfrac{d}{dx}) 只和本位系数有关,也就是说有 (h_{n, j} = h_{0, j} imesprod_i(b_i - j) = frac{(-1)^j}{j!} imesprod_i(b_i - j))

    之后可以分治 fft 算出 (B(x) = prod_i(b_i - x)),然后多点求值求出 (H_n)


    但是在本题中我们只需要算 (sum_i g_{n, i}),是否有更好的方法?

    我们知道:

    [egin{aligned} g_{n,m} &= sum_j frac{(-1)^j}{j!} imesprod_i(b_i - j) imesfrac{1}{(m-j)!} \ &= sum_p B_p imesleft(sum_j frac{(-1)^j}{j!} imes j^{n-p} imesfrac{1}{(m-j)!} ight) \ end{aligned} ]

    其中 (B_p = [x^p]prod_i(b_i - x)),一样分治 fft 算出。

    考虑将 (j^{n - p}) 展开成下降幂形式:

    [egin{aligned} & sum_j frac{(-1)^j}{j!} imes j^{n-p} imesfrac{1}{(m-j)!} \ =& sum_{k}{n - prace k} imesleft(sum_j frac{(-1)^j}{j!} imesinom{j}{k} imes k! imesfrac{1}{(m-j)!} ight) \ =& sum_{k}{n - prace k} imesleft(frac{sum_jinom{m-k}{j-k }(-1)^j}{(m-k)!} ight) \ =& (-1)^m{n - prace m} end{aligned} ]

    (sum_i g_{n, i} = sum_p B_p imes left(sum_i(-1)^i{n - prace i} ight))。接下来只需要计算 (s_{n-p} = sum_i(-1)^i{n - prace i})

    继续用代数做法。设出 EGF:(S(x) = sumfrac{s_i}{i!}x^i)。代入:

    [egin{aligned} S(x) =& sum_{i}frac{sum_m(-1)^m{irace m}}{i!}x^i \ =& sum_m(-1)^mleft(sum_{i}frac{{irace m}}{i!}x^i ight) \ =& sum_m(-1)^mfrac{(e^x-1)^m}{m!} \ =& exp(1-e^x)\ end{aligned} ]

    做个多项式 exp 即可求出。这真的更优秀吗。

  • 相关阅读:
    java小提示:标示符常见命名规则、常用ASCII
    java程序练习:数组中随机10个数中的最大值
    java第四课:数组
    java程序练习:x进制转Y进制
    java第三课:分支结构、循环结构
    java第二课:运算符和表达式
    java第一课:环境、变量、数据类型
    00
    linux 设备驱动 nand驱动框架
    linux内核源码分析plat-form 分析
  • 原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14600661.html
Copyright © 2020-2023  润新知