zoukankan      html  css  js  c++  java
  • 紫色彼岸樱推迟绽放

    根据宿命多项式和NOI斗主地的套路,一个长度为n的多项式可以被唯一表示成n个上升/下降幂多项式的和。

    把题目给的式子写成这样子的形式:

    $sum_{i=D}^{D+T-1}C_{i}^Lsum_{j=0}^{K-1}i^jA^{K-1-j}C_{K-1-j}^j$

    它的意思是:后面的部分=在若干个A插入一些i,每个空最多插一个(不然不符合条件)

    把后面的表示成$F(i)$

    式子变成了$frac{1}{L!}sum_{i=D}^{D+T-1}frac{i!}{(i-L)!}F(i)$

    用前面说的转化来把式子变成上升幂。设每个的系数为a[i],则变成了:

    $F(x)=sum_{i=0}^{K-1}a_i(x+1)^{overline{i}}=sum_{i=0}^{K-1}a_ifrac{(x+i)!}{x!}$

    继续推导公式:

    $frac{1}{L!}sum_{i=D}^{D+T-1}frac{i!}{(i-L)!}sum_{j=0}^{K-1}a_jfrac{(i+j)!}{i!}=frac{1}{L!}sum_{j=0}^{K-1}a_jsum_{i=D}^{D+T-1}frac{(i+j)!}{(i-L)!}$

    后面的阶乘可以被变成组合数:

    $frac{1}{L!}sum_{j=0}^{K-1}a_j(j+L)!sum_{i=D}^{D+T-1}C_{i+j}^{j+L}=frac{1}{L!}sum_{j=0}^{K-1}a_j(j+L)!(C_{D+T+j}^{j+L+1}-C_{D+j}^{j+L+1})$

    后面用了个组合数递推公式:添加一个新的组合数即可得到这个公式。

    如果我们得知a[i],即可在O(k)计算这个式子。

    a[i]看似只能高斯消元计算。但是把F函数变成组合数的形式,就会变成:

    $F(x)=sum_{i=0}^{K-1}a_ifrac{(x+i)!}{x!}=sum_{i=0}^{K-1}a_ii!C_{x+i}^i$

    后面的负组合数可以被转化成正组合数:c(-x,y)=c(x+y-1,y)*(-1)^y

    把-1,-2,..-k带入(记为-n-1)得到

    $F(-n-1)=sum_{i=0}^{K-1}a_ii!C_{-n-1+i}^i=sum_{i=0}^{K-1}a_ii!C_{n}^i(-1)^i=sum_{i=0}^{n}a_ii!C_{n}^i(-1)^i$

    使用二项式反演的形式之一(较为不常用)得到

    $a_nn!=sum_{i=0}^nF(-n-1)C_n^i(-1)^i$

    展开组合数发现是个卷积。

    f()可以使用矩阵乘法计算,dp一下即可。

    考试时想用斯特林数拆幂,也想到了矩阵乘法。但是没有想到斗主地推公式套路所以没做出此题。

    同时,二项式反演不熟,要加强。

    总结:这道题用到了很多推式子技巧。以后要多做推式子的题提升感觉。

  • 相关阅读:
    Python数据库 4.Python与数据库的交互
    Python数据库 3.MongoDB(区分大小写)
    Python数据库2.Redis数据库
    Python数据库1. 数据库简介
    Python基础 12.常用模块
    Python基础 11.Vim使用
    Python基础 10.linux基本命令
    栈理解
    java集合Collection
    斐波那契函数
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13057522.html
Copyright © 2011-2022 走看看