ABC415G 矩阵快速幂
ran_qwq
·
·
题解
先写个暴力 dp,f_i 表示还剩 i 瓶可乐,最大喝完的可乐数。有转移:
f_i=\max\limits_jf_{i-a_j+b_j}+a_j
$$f_i=\max\limits_jf_{i-j+mx_j}+j$$
观察到 $n$ 很大,$m$ 又可以接受三次方,考虑矩阵快速幂。令 $V=300$,维护
$$
\begin{Bmatrix}
f_i&f_{i-1}&f_{i-2}&\cdots&f_{i-V+2}&\max\limits_{j=0}^if_i
\end{Bmatrix}
$$
这样定义数组 $d$,初始为 $-\infty$:
$$d_{i-mx_i-1}\leftarrow\max(d_{i-mx_i-1},i)$$
有转移:
$$
\begin{Bmatrix}
f_{i-1}&f_{i-2}&f_{i-3}&\cdots&f_{i-V+1}&\max\limits_{j=0}^{i-1}f_i
\end{Bmatrix}
\otimes
\begin{Bmatrix}
d_0&0&-\infty&\cdots&-\infty&d_0\\
d_1&-\infty&0&\cdots&-\infty&d_1\\
d_2&-\infty&-\infty&\cdots&-\infty&d_2\\
\vdots&\vdots&\vdots&\ddots&\vdots&\vdots\\
d_{V-2}&-\infty&-\infty&\cdots&-\infty&d_{V-2}\\
-\infty&-\infty&-\infty&\cdots&-\infty&0
\end{Bmatrix}
=
\begin{Bmatrix}
f_i&f_{i-1}&f_{i-2}&\cdots&f_{i-V+2}&\max\limits_{j=0}^if_i
\end{Bmatrix}
$$
其中 $A\otimes B$ 表示矩阵 $A$ 和 $B$ 的 $(\max,+)$ 广义矩阵乘法。
用矩阵快速幂优化可做到复杂度 $O(V^3\log n)$。
[这是代码。](https://www.luogu.com.cn/paste/tn6rnqqq)