常系數齊次線性遞推


常系數齊次線性遞推

名字的來由大概是系數是常數,次數相同的線性遞推。

形式

形如

\[a_n=\sum_{i=1}^ka_{n-i}*b_i \]

題目

現在給你\(a,b\)數組,求\(a_n\),滿足\(n \ge k\)

Newbie(我)的做法

直接暴力枚舉,復雜度\(\Theta(n*k)\)

Naive(HYJ)的做法

考慮每一次轉移都是相同的,所以可以把\(b\)寫到矩陣里面然后矩陣快速冪轉移。

Master(_zzy)的做法

前置知識

特征多項式和特征方程(自行百度)

推導

現在我們要求的就是\(b^n\),一般的矩陣快速冪復雜度\(k^3logn\),所以我們需要奇技淫巧。

\(b^n=\phi(B)*P(B)+Q(B)\),又因為\(\phi(B)=0\),所以\(Q(B)=b^n\)

此時我們要求的就是\(Q(B)\),然后它是一個和\(\phi(B)\)擁有同樣項數\(k\)的多項式,所以復雜度變成了\(k^2log^2n\)

還可以進一步優化,即\(Q(B)\)每一次長度會\(*2\),但是我們可以只去前\(k\)位,把后面的系數補上來,這樣就做完了。

於是我們推出了一些形如

\[a_n=\sum_{i=1}^ka_{n-i}*b_i \]

的式子的快一點點的求法!

BZOJ4161 Shlw loves matrixI

直接按照上文的方法做就行了。但是由於\(BZOJ\)機子太快了我\(TLE(80s)\)了。

如果是\(CJ\)的同學可以去\(MOJ\)提交(當然如果你像\(\texttt{hyj}\)一樣快就沒必要了)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM