1. 程式人生 > >矩陣快速冪處理一類線性遞推組問題

矩陣快速冪處理一類線性遞推組問題

最近兩場比賽,都涉及到此類問題!以前沒注意過這種問題,都在狀態轉移方程推出後,止步於n太大!事後總結,線性遞推可以用矩陣來表示,進而快速冪解決n太大的問題!

題意:n×m矩陣填黑白兩色,行相同相鄰兩個不能同為白色,相鄰兩列不全為黑色 (n≤5,m≤1e18),問填色的方案數mod 1e9+7的值.

令黑色為1,白色為0,即每一列的長度最長為5,即狀態數最多為32(2的5次方),即An-1An-2……A0(Ai為1表示該列第i+1格子為黑色,0即為白色)

相鄰兩列不全為黑色,對應於兩列狀態不都為111……1,相鄰兩列的同行格不都為白色,即對應於相同數位不都為0,簡單的dp狀態轉移方程,只是狀態轉移方程比較多。

舉個例子: n=2時,每列有4種狀態,列舉第m列的狀態

1.0f[0][m]=f[3][m1](m0m1) 2.1f[1][m]=f[2][m1]+f[3][m1] (m2m121) 3.2f[2][m]=f[1][m1]+f[3][m1] (m1m112) 4.3f[3][m]=f[0][m1]+f[1][m1]+f[2][m1]