矩阵乘法在oi中的应用

矩阵乘法最主要的作用就是用来优化dp了,对于一些求前n-k项和的操作,可以用矩阵乘法快速幂解决
矩乘代码

struct mat
{
	long long a[105][105];
	mat operator *(const mat &x)const
	{
		mat f;
		for(int i=0;i<K;i++)
		for(int j=0;j<K;j++)
		{
			f.a[i][j]=0ll;
			for(int k=0;k<K;k++)
			f.a[i][j]=(f.a[i][j]+a[i][k]*x.a[k][j])%mod;
		}
		return f;
	}
}

最好写成重载运算符的形式,要不然很难看
然后对于一些数 a[i]=j=iki1aja[i]=\sum^{i-1}_{j=i-k}a_{j}
我们可以构造两个矩阵
(2){a[ik]a[ik+1]...a[i2]a[i1]} \left\{ \begin{matrix} a[i-k] \\ a[i-k+1] \\ ... \\ a[i-2]\\ a[i-1]\\ \end{matrix} \right\} \tag{2}
(2){010000010000010...11111} \left\{ \begin{matrix} 0 &amp; 1 &amp; 0 &amp; 0 &amp;0 \\ 0 &amp; 0 &amp; 1 &amp;0&amp;0\\ 0 &amp; 0 &amp; 0&amp;1&amp;0\\ ...\\ 1 &amp;1 &amp;1 &amp;1 &amp;1 \end{matrix} \right\} \tag{2}
这样就好啦~
完结撒花

posted @ 2018-09-26 19:12  Richardluan  阅读(11)  评论(0)    收藏  举报