拉格朗日插值

特别适用于背包类问题,尤其是树上背包。

若出现 $f_{u,i}=\sum\limits_{v_1,v_2, \dots,v_{s} \in son(u)} \sum\limits_{j_1+j_2+ \dots +j_{s}=i} {f_{v_1,j_1}f_{v_2,j_2}\dots f_{v_s,j_s}}$ 这样的卷积形式,

令 $F(u,x)=\sum\limits_{i=1}^{n} f_{u,i} x^i$,则可得 $F(u,x)=\prod\limits_{v \in son(u)} F(v,x)$。

此时 $F(u,x)$ 的次数至多为 $n$,因此记录 $F(u,x)$ 在 $x=0,1,\dots,n$ 处的值,可以 $O(n^2)$ (而非 $O(n^3)$)转移。

“解码”时,如果要多项式的系数,预处理出式子 $\prod\limits_{j \neq i}{\frac{x-j}{i-j}}$ 中 $x^k$ 的系数 $d_k$。

然后对于一个 $u$,$[x^k]F(u,x)=\sum\limits_{x=0}^{n}{d_k y_k}$。

不用系数的话,直接套拉格朗日插值公式即可。

 

$\prod\limits_{j \neq i}{\frac{x-j}{i-j}}$ 怎么求?

1. 预处理 $\frac{1}{i!}$,分母就行了。

2. $O(n^2)$ 算出多项式 $s(x)=x(x-1)\dots(x-n)$。

3. 对于 $i=0,1,\dots,n$,$O(n)$ 用长除法算出 $\frac{s(x)}{x-i}$ 即可。

posted @ 2021-11-30 20:31  CharlieVinnie  阅读(36)  评论(0编辑  收藏  举报