决策单调性

蒙日矩阵

定义

若一个 \(n\times m\) 矩阵 \(A\) 满足 \(\forall1\leq i_1\leq i_2\leq n,1\leq j_1\leq j_2\leq m,A_{i_1,j_1}+A_{i_2,j_2}\leq A_{i_1,j_2}+A_{i_2,j_1}\),则称 \(A\) 是蒙日矩阵(Monge Matrix)。

形象地说就是选定这个矩阵的任意一个子矩阵,考察四个角上的元素,若 左上 \(+\) 右下 \(\leq\) 左下 \(+\) 右上,则其为蒙日矩阵。

另外,对于函数 \(w(l,r)\),若其满足 \(\forall1\leq l_1\leq l_2\leq n,1\leq r_1\leq r_2\leq m,w(l_1,r_1)+w(l_2,r_2)\leq w(l_1,r_2)+w(l_2,r_1)\),则称其满足四边形不等式。

其实是一个东西。

判定

若直接根据定义来判定,复杂度 \(O(n^2m^2)\),不优。下面给出一个简洁的判定形式:

\(\forall 1\leq i<n,1\leq j<m,A_{i,j}+A_{i+1,j+1}\leq A_{i,j+1}+A_{i+1,j}\Leftrightarrow A\) 是蒙日矩阵。

从右往左推显然,即为定义。下面证明从左往右:

\[A_{i,j}+A_{i+1,j+1}\leq A_{i,j+1}+A_{i+1,j} \]

移项可得:

\[A_{i,j}-A_{i+1,j}\leq A_{i,j+1}-A_{i+1,j+1} \]

\(A_{i,j+1}\) 做代换可得:

\[\begin{aligned} A_{i,j}-A_{i+1,j}&\leq (A_{i,j+2}+A_{i+1,j+1}-A_{i+1,j+2})-A_{i+1,j+1}\\ A_{i,j}-A_{i+1,j}&\leq A_{i,j+2}-A_{i+1,j+2}\\ A_{i,j}+A_{i+1,j+2}&\leq A_{i,j+2}+A_{i+1,j} \end{aligned}\]

\(j\) 施加归纳,得到 \(\forall 1\leq i<n,1\leq j_1\leq j_2\leq m\),都有:

\[A_{i,j_1}+A_{i+1,j_2}\leq A_{i,j_2}+A_{i+1,j_1} \]

移项可得:

\[A_{i,j_1}-A_{i,j_2}\leq A_{i+1,j_1}-A_{i+1,j_2} \]

\(A_{i+1,j_1}\) 做代换可得:

\[\begin{aligned} A_{i,j_1}-A_{i,j_2}&\leq (A_{i+1,j_2}+A_{i+2,j_1}-A_{i+2,j_2})-A_{i+1,j_2}\\ A_{i,j_1}-A_{i,j_2}&\leq A_{i+2,j_1}-A_{i+2,j_2}\\ A_{i,j_1}+A_{i+2,j_2}&\leq A_{i+2,j_1}+A_{i,j_2} \end{aligned}\]

\(i\) 施加归纳,得到 \(\forall1\leq i_1\leq i_2\leq n,1\leq j_1\leq j_2\leq m,A_{i_1,j_1}+A_{i_2,j_2}\leq A_{i_1,j_2}+A_{i_2,j_1}\),即 \(A\) 为蒙日矩阵。

形象地说,可以看做矩阵上原来相邻的四个格子横向拉开到任意长度,然后再竖向拉开到任意长度。

可以做到 \(O(nm)\) 判定。

决策单调性

定义 \(\operatorname{opt}(A,r)\)最大\(k\) 满足 \(A_{r,k}=\min_{i=1}^m\{A_{r,i}\}\)

也就是说 \(\operatorname{opt}(A,r)\)\(A\)\(r\) 这一行上的最小值中最靠右的那一个的位置。

\(A\) 为蒙日矩阵,则 \(\operatorname{opt}(A,1)\leq \operatorname{opt}(A,2)\leq \cdots \leq \operatorname{opt}(A,n)\)

要证明这个性质,只需要证明 \(\forall 1\leq i<n,\operatorname{opt}(A,i)\leq \operatorname{opt}(A,i+1)\)

\(\operatorname{opt}(A,i)=x\)\(\operatorname{opt}(A,i+1)=y\)。假设 \(x>y\),则由 \(A\) 为蒙日矩阵,可以得到:

\[\begin{cases} A_{i,x}\leq A_{i,y}\\ A_{i+1,y}<A_{i+1,x} \end{cases}\]

合并可以得到 \(A_{i+1,x}+A_{i,y}>A_{i,x}+A_{i+1,y}\),得出 \(A\) 不是蒙日矩阵,矛盾。

所以必然有 \(\forall 1\leq i<n,\operatorname{opt}(A,i)\leq \operatorname{opt}(A,i+1)\),进而原命题成立。

对于 DP 来讲,若 \(f_i\)\(g_j\) 转移过来,则称 \(\operatorname{opt}(i)=j\)。有的 DP 同样也有类似的决策单调性性质,常用构造蒙日矩阵来证明 DP 的决策单调性。

拓展性质

  1. \(A\) 为蒙日矩阵,则 \(A^T\) 为蒙日矩阵。
  2. 若给蒙日矩阵 \(A\) 的一行或一列同时加上一个数,则 \(A\) 仍然为蒙日矩阵。

原因显然。但是很有用。

蒙日矩阵行最小值求解及其应用

就是要对所有的 \(1\leq r\leq n\) 求出 \(\operatorname{opt}(A,r)\)

离线分治算法

该算法要求 \(A\) 静态且 \(A\) 中元素能够快速计算或已知一个元素能快速计算其相邻元素。

\(\operatorname{solve}(l,r,L,R)\) 表示满足 \(L\leq\operatorname{opt}(A,l),\operatorname{opt}(A,r)\leq R\),求解 \(\operatorname{opt}(A,l)\sim \operatorname{opt}(A,r)\) 的函数。

很容易写出代码:

void solve(int l,int r,int L,int R){
	if(l>r)return;
	int mn=INF,mnpos=0;
	int m=(l+r)>>1;
	for(int i=L;i<=R;i++){
		mn=min(mn,w(m,i));
		if(mn==w(m,i))mnpos=i;
	}
	argmin[m]=mnpos;
	solve(l,m-1,L,mnpos);
	solve(m+1,r,mnpos,R);
}

不难分析出一共有 \(O(\log n)\) 层分治,每层分治 \(O(m)\),所以时间复杂度 \(O(m\log n)\)

常用于优化 DP,形如:

\[f_{i,j}=\min_{k<j}\{f_{i-1,k}+w(k,j)\} \]

其中 \(w\) 满足四边形不等式。构造矩阵 \(A\)

\[A_{x,y}=\begin{cases} f_{i-1,y}+w(y,x),&x\leq y\\ +\infin,&x>y \end{cases}\]

容易说明,\(A\) 为蒙日矩阵。则每层转移相当于求出 \(A\)\(\operatorname{opt}\)。侧面说明了这个 DP 有决策单调性,于是套上分治即可 \(O(n\log n)\) 解决一层转移。

在线算法

该算法用于解决每次增量加入 \(A\) 的一列,快速维护 \(\operatorname{opt}\) 的情况。

维护一个队列,队列中元素为 \((l,r,p)\),表示当前状态下 \(\operatorname{opt}(A,l)\sim \operatorname{opt}(A,r)=p\)。初始时元素为 \((1,n,1)\)

新加入一列 \(k\),考虑队尾元素 \((l,r,p)\),如果 \(A_{l,p}\geq A_{l,k}\),由于决策单调性,说明 \(p\) 这一列已经没用了,直接弹出队列。一直到队列为空或队尾元素 \((l,r,p)\) 满足 \(A_{r,p}\geq A_{r,k},A_{l,p}<A_{l,k}\),则这其中一定存在一个分界点 \(m\in[l,r)\) 满足 \(\operatorname{opt}(A,l)\sim \operatorname{opt}(A,m)=p,\operatorname{opt}(A,m+1)\sim \operatorname{opt}(A,r)=k\)。此时二分出这个 \(m\),然后更新队列即可。

至于为什么要用队列而不是栈,原因是当前加入的这一列元素的值可能与前面求出的 \(\operatorname{opt}\) 有关。这种矩阵一般上半三角元素都为 \(+\infin\),所以加入第 \(k\) 列时前 \(k-1\) 行的 \(\operatorname{opt}\) 都已经确定了。

常用于优化 DP,形如:

\[f_i=\min_{j<i}\{f_j+w(j,i)\} \]

其中 \(w\) 满足四边形不等式。构造蒙日矩阵 \(A\)

\[A_{x,y}=\begin{cases} f_{y}+w(y,x),&x\leq y\\ +\infin,&x>y \end{cases}\]

相当于增量加列求 \(A\)\(\operatorname{opt}\),侧面说明了这个 DP 有决策单调性。

下面给出优化这种形式 DP 的常用模板:

deque<Opt> q;
q.push_back({1,n,0});
for(int i=1;i<=n;i++){
	while(q.size()>1&&q.front().r<i)q.pop_front();
	f[i]=w(opt[i]=q.front().p,i);
	while(q.size()>1&&w(i,q.back().l)<=w(q.back().p,q.back().l))q.pop_back();
	int l=q.back().l,r=n+1;
	while(l<r){
		int mi=(l+r)>>1;
		if(w(i,mi)<=w(q.back().p,mi))r=mi;
		else l=mi+1;
	}
	if(l>n)continue;//?
	q.back().r=l-1;
	q.push_back({l,n,i});
}

例题

重点在于证明决策单调性。

P3515

即对于每个 \(i\) 求出 \(\max_j\{h_j+\sqrt{|i-j|}\}-h_i\)。常数项 \(h_i\) 可以直接扔了,最后再减回来。

不妨先全部取相反数,最后再取回来。转化为求 \(\min_{j}\{-h_j-\sqrt{|i-j|}\}\)

构造矩阵 \(A_{i,j}=-h_j-\sqrt{|i-j|}\)。现在希望证明 \(A\) 是蒙日矩阵。注意到 \(-h_j\) 一项相当于给 \(j\) 这一列同时加上 \(-h_j\),则现在可以转化为证明 \(A_{i,j}=-\sqrt{|i-j|}\) 是蒙日矩阵。

用判定法证明:

\[\begin{aligned} -\sqrt{|i-j|}-\sqrt{|(i+1)-(j+1)|}&\leq -\sqrt{|(i+1)-j|}-\sqrt{|i-(j+1)|}\\ -2\sqrt{|i-j|}&\leq -\sqrt{|i-j+1|}-\sqrt{|i-j-1|}\\ 2\sqrt{|i-j|}&\geq \sqrt{|i-j+1|}+\sqrt{|i-j-1|} \end{aligned}\]

感受一下,\(\sqrt x\) 是凸的,所以 \(+1\) 带来的增量必然小于 \(-1\) 带来的减量,于是得证。

离线分治即可 \(O(n\log n)\) 解决该问题。

posted @ 2025-04-14 15:47  Linge_Zzzz  阅读(63)  评论(0)    收藏  举报