多项式卷积技巧(其中一个多项式系数是简单组合数)

多项式卷积技巧(其中一个多项式系数是简单组合数)

考虑下面的问题:

\[f_{i,j}={w_i\choose j}+\sum_{k< i} (\sum_{l\leq j} f_{k,l}{s_{k,i}\choose j-l})g_{k,i},(i\leq n,j\leq m) \]

其中\(w,g,s\)为任意数字,求\(f\)

暴力转移是\(O(N^2M^2)\)的。

用多项式乘法可以\(O(N^2M\log M)\)常数较大。

下面讨论一种\(O(N^2M)\)的小常数做法。

首先需要对组合数进行一步转换:\({m\choose n}=[x^n](1+x)^m\)

则式子就可以写成:

\[f_i=h_{i}+\sum_{k<i}(f_k\times (1+x)^{s_{k,i}})g_{k,i} \]

其中\(h_{i}=\sum_{j\geq 0} {w_i\choose j}x^j\)

定义\(f'\)表示\(f\)左移\(1\)得到的多项式。

则上面的式子就是:

\[f'_i=h'_i+\sum_{k<i} f'_k\times x^{s_{k,i}}g_{k,i} \]

其实就是右移,相加。

最后通过\(f'\)还原到\(f\)只需要实现右移\(1\)即可。

代码非常好写。

例题:SRM 761 div1 Level 3 SpanningSubgraphs

题解+代码:SRM 761 div1 Level 3 SpanningSubgraphs 题解 - QQQ,,, - 博客园 (cnblogs.com)

posted @ 2021-07-08 23:09  WWW~~~  阅读(240)  评论(0编辑  收藏  举报