[JLOI2016] 成绩比较

博客围绕推石子问题展开,先给出课程分数合法分布方案数\(d[i]\)及前\(i\)门课程中\(j\)个人被碾压的合法方案数\(f[i,j]\)的计算方法。重点介绍拉格朗日插值,用于处理\(d[i]\),已知\(n\)次多项式过\(n + 1\)个点求\(P(k)\),总时间复杂度为\(O(n^2)\)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推石子

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

然后设\(f[i,j]\)表示前\(i\)门课程中\(j\)个人被碾压的合法方案数,转移有:
\[ \begin{aligned} &f[i,j]=d[i]\times\sum_{k=1}^n\pmatrix{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\not= j} \dfrac{x-x_i}{x_j-x_i}\),容易得到\(\ell_j(x_j)=1\)\(\ell_j(x_i\mid i\not=j)=0\);于是顺理成章地可以构造出\(P(x)​\)
\[ P(x)=\sum_{i=0}^ny_i\ell_i(x) \]
构造\(\{\ell_{j}(x)\}\)\(O(n^2)\)的,构造\(P(x)\)以及代值计算均是\(O(n)\)的,故总时间复杂度为\(O(n^2)\)

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

参考实现

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

转载于:https://www.cnblogs.com/nosta/p/10554883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值