作用:计算特殊的递推式;
难点:构建矩阵递推式;
代码:
//用二维vector来表示矩阵
typedef vector<int> vec;
typedef vector<vec> mat;
typedef long long LL;
const int MOD = 1000;
//计算A*B
mat mul(mat &A,mat &B)//返回mat类型;
{
mat C(A.size(),vec(B[0].size()));//临时二维vector,自动初始化为0,,数组形式不是全局变量要初始化memset;
for(int i=0;i<A.size();i++)
for(int k=0;k<B.size();k++)
if(A[i][k]!=0)//对于矩阵较多0;
for(int j=0;j<B[0].size();j++)
C[i][j]=(C[i][j]+A[i][k]*B[k][j])%MOD;
return C;
}
//计算A^n
mat pow(mat A,LL n)//返回mat类型;
{
mat B(A.size(),vec(A[0].size()));//临时二维vector;
for(int i=0;i<A.size();i++)
B[i][i]=1;
while(n>0)//快速幂
{
if(n&1) B=mul(B,A);
A=mul(A,A);
n>>=1;
}
return B;
}
常用一般矩阵后续更新...