[POJ] 3233. Matrix Power Series
題目連結: http://poj.org/problem?id=3233 其實看到的時候以為是要用等比級數的公式,可是馬上就發現兩個會慘的點1.不保證有反矩陣, 2.不保證有些東西模m有反元素。後來被提示了才知道原來其實是用DP的想法找的轉移矩陣,然後對他快速冪。稍微列一下式就會得到$ \begin{bmatrix} S_i \\ A_i \end{bmatrix} = \begin{bmatrix} I \cdot S_{i-1}+A \cdot A_{i-1} \\ 0 \cdot S_{i-1}+A \cdot A_{i-1} \end{bmatrix} = \begin{bmatrix} I & A \\ 0 & A \end{bmatrix} \cdot \begin{bmatrix} S_{i-1} \\ A_{i-1} \end{bmatrix} $,所以就照著這個跑就好了。 #include <iostream>
using namespace std;
const int N = 60 + 2;
int (*A)[N] = new int[N][N];
int (*Mtx)[N] = new int[N][N];
int (*Temp)[N] = new int[N][N];
int (*Ans)[N] = new int[N][N];
int (*Res)[N] = new int[N][N];
int n, m, n2;
inline void mTimes(int[N][N],int[N][N],int[N][N],int,int,int);
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
int k; cin>>n>>k>>m;
n2 = n<<1;
for(int i=0;i<n;i++) for(int j=0;j<n;j++)
cin>>A[i][j];
for...