1 条题解

  • 0
    @ 2025-8-24 22:00:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar GKxx
    欲买桂花同载酒,终不似,少年游。

    搬运于2025-08-24 22:00:27,当前版本为作者最后更新于2019-02-03 15:53:56,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本蒟蒻第一次做这种亦可赛艇的DP优化...

    真是妙不可言啊

    首先我们有一个暴力的DP:f(i,j)f(i,j)表示前ii个数取值域范围[1,j][1,j]的所有不同合法序列的值之和。但是这样转移并不方便。我们可以只考虑递增的序列,考虑第ii个数取不取jj,于是有转移

    f(i,j)=f(i1,j1)×j+f(i,j1)f(i,j)=f(i-1,j-1)\times j+f(i,j-1)

    最后对于每个递增序列都可以任意重排,所以答案是f(n,A)×n!f(n,A)\times n!

    这样做的复杂度是O(nA)O(nA)的,并不能通过,需要优化。

    首先你要知道一个定理:平面上横坐标不同的任意n+1n+1个点可以唯一确定一个次数不高于nn的多项式p(x)p(x),可以使用拉格朗日插值公式来确定:

    $$p(x)=\sum\limits_{i=0}^ny_i\prod\limits_{j\neq i}\frac{x-x_j}{x_i-x_j} $$

    假设f(n,i)f(n,i)是关于iig(n)g(n)次多项式,我们来推导g(n)g(n)的表达式。

    注意到:如果p(x)p(x)nn次多项式,那么差分p(x)p(x1)p(x)-p(x-1)n1n-1次多项式。证明比较显然。

    然后我们发现f(n,i)f(n,i)的转移方程里有差分的形式:

    f(n,i)f(n,i1)=f(n1,i1)×if(n,i)-f(n,i-1)=f(n-1,i-1)\times i

    观察这个式子。左边是关于iig(n)1g(n)-1次多项式,右边是关于iig(n1)+1g(n-1)+1次多项式,于是我们有

    g(n)1=g(n1)+1g(n)-1=g(n-1)+1

    n=0n=0时显然有

    g(0)=0g(0)=0

    不难发现g(n)g(n)是等差数列,得到g(n)=2ng(n)=2n

    利用数学归纳法直接按照转移方程归纳也可以证明,但我这里是在未知结论的情况下正面推导的。

    既然f(n,i)f(n,i)是关于ii2n2n次多项式,我们就不需要求出f(n,A)f(n,A),只要求出f(n,1)f(n,1)f(n,2n+1)f(n,2n+1),就有了2n+12n+1个点,利用拉格朗日插值即可插出f(n,A)f(n,A)的值。

    直接利用拉格朗日插值公式是O(n2)O(n^2)的,当横坐标是连续的整数的时候可以预处理前缀积和后缀积来优化到O(n)O(n),另外就算横坐标不是连续的整数我们也可以用一些玄妙的做法快速插值。但是本题n500n\leq500,就随意啦

    代码比较简单,就不贴了。

    • 1

    信息

    ID
    3430
    时间
    3000ms
    内存
    500MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者