1. 程式人生 > 其它 >多項式卷積技巧(其中一個多項式係數是簡單組合數)

多項式卷積技巧(其中一個多項式係數是簡單組合數)

多項式卷積技巧(其中一個多項式係數是簡單組合數)

考慮下面的問題:

\[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)