矩阵乘法
1.定义
我们定义一个矩阵A*B,首先需要使A的宽等于B的长。
对于矩阵C等于A*B
\[c_{i,j}=\sum_{} a_{i,k}+b_{k,j}
\]
一些运算律
结合律:A*(B*C)=(A*B)*C
分配律:A*(B+C)=A*B+A*C
2.应用一:矩阵加速
它一般可以用于一些dp的加速,基本思想为构造一个矩阵A,使
{\(dp_1,dp_2,dp_3,...,dp_k\)}*A={\(dp_2,dp_3,dp_4,...,dp_{k+1}\)}
其中k根据dp状态式推定
由此可得{\(dp_1,dp_2,dp_3,...,dp_k\)}\(A^{n-k}\)={\(dp_{n-k+1},dp_{n-k+2},dp_{n-k+3},...,dp_n\)}
其中我们使用快速幂即可计算出\(A^{n-k}\)。
对此我们发现这一类题能够优化的先决条件有二
1.一个dp状态由它之前的某些状态相加得到
2.这些状态离该状态不能太远(即k值要很小)
我们便可以将O(n)优化为O(\(k^2logn\))
例题 【洛谷】 P4000 斐波那契数列