矩阵乘法优化 DP

对于一些 DP 转移式,可以将它转换成矩阵乘法,而矩阵乘法满足结合律,所以可以使用快速幂在 $O(\log n)$ 的时间内计算完。

矩阵乘法优化 DP 的条件:

  1. 转移式简单,因为转移矩阵不可以改变,所以只能有一次项,如 $f_i=i \times f_{i-1}+f_{i-2}$,但是不能含有 $\max$ 函数和 $\min$ 函数,不能含有 $f_{i-1} \times f_{i-2}$ 之类的式子;
  2. 递推次数很多,$O(n)$ 递推无法通过,需要 $O(\log n)$ 算法。

矩阵乘法优化 DP 的步骤:

  1. 写好转移式;
  2. 构造出转移矩阵;
  3. 矩阵快速幂。

如何构造转移矩阵

缺什么补什么,将所有的项加进矩阵。

带常数项 $k$

递推方程:$f_n=f_{n-1}+f_{n−2}+k$

$$f_n=\begin{vmatrix} f_n & f_{n-1} & k \end{vmatrix},\mathrm{base}=\begin{vmatrix} 1 & 1 & 0 \\ 1 & 0 & 0 \\ 1 & 0 & 1 \end{vmatrix}$$

带未知数项 $n$

递推方程:$f_n=f_{n−1}+f_{n−2}+n$

$$f_n=\begin{vmatrix} f_n & f_{n-1} & n & 1 \end{vmatrix},\mathrm{base}=\begin{vmatrix} 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 \end{vmatrix}$$

求和

递推方程:$f_n=f_{n-1}+f_{n−2}$

求:$\sum\limits_{i=1}^n{f_i}$

暴力计算 $n$ 次得出 $f_i$ 数组肯定是不行的,但可以尝试将 $S_n$ 放入矩阵跟随着 $f_n$ 一起递推

于是得到一个式子:$S_n=S_{n-1}+f_n$

$$f_n=\begin{vmatrix} f_n & f_{n-1} & S_{n-1} \end{vmatrix},\mathrm{base}=\begin{vmatrix} 1 & 1 & 1 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{vmatrix}$$

例题:矩阵乘法快速幂

名称 编号 备注 题解
随机数生成器 NOI2012D1T1 矩阵乘法快速幂,龟速乘 提交记录 备份
矩阵游戏 NOI2013D2T1 矩阵乘法快速幂 提交记录 备份
Xor-sequences CF691E 矩阵乘法快速幂 提交记录 备份
Product Oriented Recurrence CF1182E 矩阵乘法快速幂,化乘法为指数的加法,指数对 $P-1$ 取模 提交记录 备份
题面 PDF,矩阵乘法优化递推
矩阵乘法快速幂,常数优化
考虑正方形面积之积的组合意义,矩阵快速幂优化 DP
矩阵乘法优化 DP,容斥原理

例题:线段树上维护矩阵乘法

名称 编号 备注 题解
Sasha and Array CF718C 矩阵乘法快速幂,斐波那契数列,线段树 提交记录 备份
William The Oblivious CF1609E 新定义的矩阵乘法,线段树 提交记录 备份
[THUSCH2017] 大魔法师 Luogu P7453 提交记录 备份

例题

名称 编号 备注 题解