zoukankan      html  css  js  c++  java
  • [JLOI2016] 成绩比较

    推石子

    首先设(d[i]=sum_{t=1}^{U[i]}t^{n-R[i]}(U[i]-t)^{R[i]-1}),即第(i)门课程分数的合法分布方案数;

    然后设(f[i,j])表示前(i)门课程中(j)个人被碾压的合法方案数,转移有:

    [egin{aligned} &f[i,j]=d[i] imessum_{k=1}^npmatrix{k\k-j}pmatrix{n-k-1\(R[i]-1)-(k-j)}f[i-1,k] &f[0,n-1]=1 end{aligned} ]

    意义为:决策中之前被碾压的(k)个中(k-j)个翻身了(这一课程的成绩高于B神),没被碾压的(n-k-1)个中则剩((R[i]-1)-(k-j))个成绩高于B神,取组合数。

    重头戏来了:如何处理(d[i])?

    拉格朗日插值

    问题描述:已知(n)次多项式多项式(P(x))经过了(n+1)个不重点({(x_n,y_n)}),求(P(k)​)

    高斯消元求系数表达式什么的就别来了。

    构造(n)个拉格朗日基本多项式(ell_j(x)=prod_{i ot= j} dfrac{x-x_i}{x_j-x_i}),容易得到(ell_j(x_j)=1)(ell_j(x_imid i ot=j)=0);于是顺理成章地可以构造出(P(x)​)

    [P(x)=sum_{i=0}^ny_iell_i(x) ]

    构造({ell_{j}(x)})(O(n^2))的,构造(P(x))以及代值计算均是(O(n))的,故总时间复杂度为(O(n^2))

    回溯到本题,可以将(d[i])看作一个(n)次多项式(P(x))(U[i])处的取值,可以插值计算了。

    参考实现

    我已经是个嘴巴选手了还要什么实现?留坑逃

  • 相关阅读:
    SqQueue(环状队列(顺序表结构))
    LinkQueue(链队列)
    CharMatch(括号匹配)
    LinkStack
    x-boot
    安装npm及cnpm(Windows)
    sourcetree跳过注册的方法
    Mysql 5.7 CentOS 7 安装MHA
    ORA-12519 ORA-12516
    lisp : set 与setq 函数
  • 原文地址:https://www.cnblogs.com/nosta/p/10554883.html
Copyright © 2011-2022 走看看