矩陣快速冪優化的dp

如果你已經推導出了轉移方程
dp[i][j]=dp[i1][fit[j]]dp[i][j]=\sum dp[i-1][fit[j]]
那麼你可以把這個式子表示爲如下的矩陣形式:
[010101010][dp[i1][0]dp[i1][1]dp[i1][2]]=[dp[i][0]dp[i][1]dp[i][2]]\left[ \begin{matrix} 0&1&0\\ 1&0&1\\ 0&1&0 \end{matrix} \right] *\left[ \begin{matrix} dp[i-1][0]\\ dp[i-1][1]\\ dp[i-1][2] \end{matrix} \right]= \left[ \begin{matrix} dp[i][0]\\ dp[i][1]\\ dp[i][2] \end{matrix} \right]
左邊第一個矩陣設爲T,T[i][j]爲1,表示i與j是fit的。爲0則不fit。
設等式右邊那塊是fn,則這個式子可以表示爲Tfn1=fnT*f_{n-1}=f_n,推下去就得到Tn1f1=fnT^{n-1}*f_1=f_n。把Tn1T^{n-1}用矩陣快速冪解出來,與f1f_1相乘就得到fnf_n了。
與笨拙的循環dp相比,速度之快令人咋舌。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章