矩阵

· · 个人记录

概述

运算

加速 DP 转移

示范代码

struct matrix{
    int n,m;
    ll v[maxmat][maxmat];
    matrix(){mem(v,0);}
    matrix(int _n,int _m,bool _flag=0){
        n=_n,m=_m,mem(v,0);
        if(_flag) For(i,1,n) v[i][i]=1;
    }
};

il matrix operator*(const matrix &A,const matrix &B){
    matrix ret=matrix(A.n,B.m);
    For(i,1,ret.n)
        For(k,1,A.m)
            For(j,1,ret.m)
                add(ret.v[i][j],A.v[i][k]*B.v[k][j]%mod);
    return ret;
}

il matrix qpow(matrix x,int t){
    matrix ret=matrix(x.n,x.m,1);
    while(t){
        if(t&1) ret=ret*x;
        x=x*x;
        t>>=1;
    }
    return ret;
}

例题

P5303 [GXOI/GZOI2019] 逼死强迫症