简记决策单调性
单调矩阵
定义
对于矩阵 \(A\),定义 \(\min_i(A)\) 表示最大的 \(k\) 满足 \(A_{i,k}=\min_jA_{i,j}\),即第 \(i\) 行最靠后的最小值位置 .
定义:对于 \(i<j\) 满足 \(\min_i(A)\le\min_j(A)\) 的矩阵称作单调矩阵 . 若一个矩阵 \(A\) 的所有子矩阵均为单调矩阵,则称为完全单调矩阵 .
常规意义上的决策单调性问题就是单调矩阵上求列最小值的问题 .
对于任意 \(i_1<i_2\),\(j_1<j_2\) 满足 \(A_{i_1,j_1}+A_{i_2,j_2}\le A_{i_1,j_2}+A_{i_2,j_1}\),则称矩阵 \(A\) 满足四边形不等式 .
一个矩阵满足四边形不等式,则称其为蒙日矩阵或者蒙日阵 .
定理:矩阵 \(A\) 满足四边形不等式当且仅当对于任意 \(i,j\) 满足 \(A_{i,j} + A_{i+1, j+1} \le A_{i, j+1} + A_{i+1, j}\) . 证明考虑二维差分即可 .
显然蒙日阵均为完全单调矩阵,所以满足四边形不等式可以导出满足决策单调性 .
蒙日阵的生成
蒙日矩阵乘法(\((\min,+)\) 矩阵乘法):
断言:若 \(A\) 是蒙日阵,则下列矩阵都是蒙日阵:
- \(A^{\sf T}\) .
- \(\lambda A\) 其中 \(\lambda\ge 0\) .
- \(A\) 的某一行或列上全体加常数 \(c\) 后得到的矩阵 .
若 \(A,B\) 是蒙日阵,则 \(A+B\) 和 \(AB\) 都是蒙日阵 .
蒙日阵的乘积仍是蒙日阵
令 \(A,B\) 是蒙日阵,\(C=AB\) . 考察 \(i_1\le i_2\),\(j_1\le j_2\),\(k_1\) 是 \(C_{i_1,j_2}\) 取到最小值的位置,\(k_2\) 是 \(C_{i_2,j_1}\) 取到最小值的位置 . 不失一般性,令 \(k_1\le k_2\) .
则:
即得原命题 .
一些常见的蒙日阵 \(A\) 的例子:
- \(A_{x,y}=\min\{x,y\}\) .
- \(A_{x,y}=\max\{x,y\}\) .
- \(A_{x,y}=xy\) .
- \(A_{x,y}=|x-y|^p\) 其中 \(p\le 1\) .
- \(A_{x,y}=\sum_{i=1}^n\sum_{j=y}^md_{i,j}\) 其中 \(d_{i,j}\ge0\) .
- \(A_{x,y}=[x=k]v_k\) .
- \(A_{x,y}=[y=k]v_k\) .
- \(A_{x,y}=f(x-y)\) 其中 \(f\) 下凸 .
- \(A_{x,y}=\begin{cases}-f(\{T_x,\cdots,T_y\})&x\le y\\+\infty&\text{otherwise.}\end{cases}\) 其中 \(f\) 是 \(S\) 上的次模函数,\(T\) 是 \(2^S\) 中的任意 \(|S|\) 个不同元素 .
注:函数 \(f\) 是 \(S\) 上的次模函数当且仅当对于任意 \(X,Y\in 2^S\) 有 \(f(X)+f(Y)\ge f(X\cap Y)+f(X\cup Y)\) .
一维决策单调性
问题描述
考虑两种 DP:
- 对于 \(dp_{i,j}=\min\limits_{k<j}\{dp_{i-1,k}+w_{k,j}\}\),注意到相当于每次乘 \(W^{\sf T}\) 加若干列 \(dp_{i-1,y}\) 构成的矩阵,所以若 \(W\) 是蒙日阵则 DP 有决策单调性 .
- 对于 \(dp_i=\min\limits_{j<i}\{dp_j+w_{j,i}\}\),可以类似分析出决策单调性 .
后称第一种 DP 为离线决策单调性,第二种 DP 为在线决策单调性 . 假设 \(w\) 可以 \(O(1)\) 计算 .
下面介绍解决两类问题的线性对数算法,线性算法在 OI 中没啥用就不说了 .
第一类问题又称为决策单调性最短路问题,可以证明答案一定是凸的:[JOISC 2023 Day3] Chorus .
分治
分治可以解决离线决策单调性的问题 .
\(\operatorname{solve}(l,r,L,R)\) 表示计算 \(l\dots r\) 行的 \(\min_i(A)\),且 \(L\le\min_i(A)\le R\),每次取中点 \(m=\lfloor\frac{l+r}2\rfloor\) 算 \(\min_m(A)\),分别处理 \(\operatorname{solve}(l,m-1,L,\min_m(A)),\operatorname{solve}(m+1,r,\min_m(A),R)\) 即可 .
共 \(O(\log n)\) 层,每层 \(O(m)\) 个点,故复杂度为 \(O(m)\) .
这里可以注意一点:如果每次暴力移动指针计算所有 \(A\),总的移动距离是线性对数级别的:CF868F .
二分栈
动态维护每个列 \(i\) 对应取到最小值的行区间 \([l_i,r_i]\) . 依次插入每个列 \(i\):
- 若栈不为空且栈顶元素 \(j\) 满足 \(A_{l_j,i}\le A_{l_j,j}\),弹栈,然后重复操作 .
- 若栈为空则加入 \(l_i=1,r_i=n\) .
- 否则,取栈顶元素 \(j\),二分出最大的 \(k\) 满足 \(A_{k,j}<A_{k,i}\) 然后令 \(r_j\gets k\),若 \(r_j\neq n\) 则加入 \(l_i=k+1,r_i=n\) .
省流:对于任意两列,左边的列在一段前缀优,右边的列在一段后缀优,二分出分界点 .
显然时间复杂度为 \(O(m\log n)\) .
二维决策单调性
最优搜索树问题
问题:
定义:若方阵 \(A\) 满足对于任意 \(i_1\le i_2\le j_2\le j_1\) 都有 \(A_{i_1,j_1}\ge A_{i_2,j_2}\) 则称 \(A\) 满足区间包含单调性 .
定理:若 \(w\) 满足四边形不等式和区间包含单调性,则 \(dp\) 满足四边形不等式 .
证明
只需证对于任意 \(i_1\le i_2\le j_1\le j_2\) 满足 \(dp_{i_1,j_1}+dp_{i_2,j_2}\le dp_{i_1,j_2}+dp_{i_2,j_1}\) .
对 \(j_2-i_1\) 归纳,\(j_2-i_1\le1\) 时显然 .
令 \(dp_{i,j,x}=w_{i,j}+dp_{i,x}+dp_{x+1,j}\) . 讨论:
- 若 \(i_2=j_1\),则需要证明三角形不等式 \(dp_{i_1,j_1}+dp_{j_1,j_2}\le dp_{i_1,j_2}\),令 \(dp_{i_1,j_2}\) 的最优决策点是 \(u\le j_1\),则:\[\begin{aligned}dp_{i_1,j_1}+dp_{i_2,j_2}&\le dp_{i_1,j_1,u}+dp_{j_1,j_2}\\&=w_{i_1,j_1}+dp_{i_1,u}+dp_{u+1,j_1}+dp_{j_1,j_2}\\&\le w_{i_1,j_2}+dp_{i_1,u}+dp_{u+1,j_2}\\&=dp_{i_1,j_2}\end{aligned} \]\(u>j_1\) 类似 .
- 若 \(i_2\neq j_1\),令 \(dp_{i_1,j_2}\) 与 \(dp_{i_2,j_1}\) 的最优决策点分别为 \(u\le v\),则:\[\begin{aligned}dp_{i_1,j_1}+dp_{i_2,j_2}&\le dp_{i_1,j_1,u}+dp_{i_2,j_2,v}\\&=(w_{i_1,j_1}+w_{i_2,j_2})+(dp_{i_1,u}+dp_{i_2,v})+(dp_{u+1,j_1}+dp_{v+1,j_2})\\&\le (w_{i_1,j_2}+w_{i_2,j_1})+(dp_{i_1,u}+dp_{i_2,v})+(dp_{u+1,j_2}+dp_{v+1,j_1})\\&=dp_{i_1,j_2}+dp_{i_2,j_1}\end{aligned} \]\(u>v\) 类似 .
证明完毕 .
定理:设 \(dp_{i,j}\) 的最优决策点为 \(K_{i,j}\),则 \(K_{i-1,j}\le K_{i,j}\le K_{i,j+1}\) .
证明:下面证明 \(K_{i,j}\le K_{i,j+1}\),另一边类似 .
构造:
那么 \(A\) 是蒙日阵,且 \(K_{i,j}=\min_j(A)\),所以有单调性 .
那么按区间长度依次计算 \(dp\) 和 \(K\) 即可做到 \(\Theta(n^2)\) 时间复杂度 .
蒙日矩阵乘法
问题:给两个蒙日矩阵 \(A,B\),求 \(C=AB\) .
定理:令 \(K_{i,j}\) 为 \(C_{i,j}\) 最小的最优决策点,则 \(K_{i,j-1}\le K_{i,j}\le K_{i+1,j}\) .
类似地,也只需要证明 \(K_{i,j-1}\le K_{i,j}\) .
若存在 \(j_1<j_2\) 使得 \(K_{i,j_1}>K_{i,j_2}\) . 令 \(K_{i,j_1}=k,\,K_{i,j_2}=l\),则:
矛盾!则即得 \(K_{i,j_1}\le K_{i,j_2}\) .
那么可以用和上一节类似的方法 \(\Theta(n^2)\) 计算蒙日矩阵乘法:序列变换 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/18350498
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ