动态 dp
max(min)-plus 矩阵运算
前置知识:矩阵运算
引入
在之前的矩阵运算里,我们可以将两个矩阵相乘来得到一个新的矩阵,这可以让我们在 dp[n]
。
但这些 dp 都有一个共同特征:不包含 max/min。
那么假如状态转移方程中有 max/min,该如何优化呢?
更改矩阵运算规则
我们把矩阵乘法的规则更改一下:
matrix operator * (matrix y) { matrix z; z.n = n, z.m = y.m; for (int i = 1; i <= n; i++) for (int j = 1; j <= y.m; j++) { z.a[i][j] = -INF; for (int k = 1; k <= m; k++) z.a[i][j] = max(z.a[i][j], a[i][k] + y.a[k][j]); } return z; }
同样也满足各种性质。
那么如果不可转移,就在矩阵对应位置赋极大/极小值,做快速幂即可。
动态 dp
利用矩阵运算和线段树维护动态 dp。
例题:contest
本文作者:wnsyou の blog
本文链接:https://www.cnblogs.com/wnsyou-blog/p/18366857/max_or_min-plus-matrix
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步