简单四边形不等式优化dp(上)

news2025/4/10 9:19:07

*下文中“优于”一般指的是“不劣于”,请自行分辨。

四边形不等式

四边形不等式定义为:
位于整数集合上的二元函数 f ( x , y ) f(x,y) f(x,y),对于 a ≤ b ≤ c ≤ d a\leq b\leq c\leq d abcd,若满足: f ( a , c ) + f ( b , d ) ≤ f ( a , d ) + f ( b , c ) f(a,c)+f(b,d)\leq f(a,d)+f(b,c) f(a,c)+f(b,d)f(a,d)+f(b,c),即相交和小于包含和,则称函数 f f f满足四边形不等式。
在这里插入图片描述

函数 f f f若满足 f ( a , c ) + f ( b , d ) ≤ f ( a , d ) + f ( b , c ) f(a,c)+f(b,d)\leq f(a,d)+f(b,c) f(a,c)+f(b,d)f(a,d)+f(b,c),即相交和大于包含和,则亦称函数 f f f满足四边形不等式。

在动态规划问题中,四边形不等式指的是相交优于包含(可能是大于,也可能是小于),因为相交优于包含能够推出决策单调性。接下来讨论相交小于包含。

四边形不等式具有两种等价的定义:

  1. a ≤ b ≤ c ≤ d : f ( a , c ) + f ( b , d ) ≤ f ( a , d ) + f ( b , c ) a\leq b\leq c\leq d:f(a,c)+f(b,d)\leq f(a,d)+f(b,c) abcd:f(a,c)+f(b,d)f(a,d)+f(b,c)
  2. f ( i , j ) + f ( i + 1 , j + 1 ) ≤ f ( i , j + 1 ) + f ( i + 1 , j ) f(i,j)+f(i+1,j+1)\leq f(i,j+1)+f(i+1,j) f(i,j)+f(i+1,j+1)f(i,j+1)+f(i+1,j)

下面是证明。

还原不等式

接下来展示一种用来推式子的方法。主要思想就是根据条件列出一个不等式,然后把结论写成另一个不等式。通过对比发现从条件到结论差了什么,然后把差的那部分还原出来。

我们证明一下从2推出1,记 f ( x , y ) = f x , y f(x,y)=f_{x,y} f(x,y)=fx,y

首先我们归纳,假设对于所有的长度小于 j − i + 2 j-i+2 ji+2的区间都满足“从2可以推出1”的结论:

我们已知 f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j    ① f_{i,j}+f_{i+1,j+1}\leq f_{i,j+1}+f_{i+1,j}\;① fi,j+fi+1,j+1fi,j+1+fi+1,j

要证明 f i , c + f b , j + 1 ≤ f i , j + 1 + f b , c ( i ≤ b ≤ c ≤ j + 1 ) f_{i,c}+f_{b,j+1}\leq f_{i,j+1}+f_{b,c}(i\leq b\leq c\leq j+1) fi,c+fb,j+1fi,j+1+fb,c(ibcj+1)
在这里插入图片描述

现在我们设法让式子中的 i + 1 i+1 i+1变为 i + 2 i+2 i+2
f i , j + f i + 2 , j + 1 ≤ f i , j + 1 + f i + 2 , j    ② f_{i,j}+f_{i+2,j+1}\leq f_{i,j+1}+f_{i+2,j}\;② fi,j+fi+2,j+1fi,j+1+fi+2,j

然后我们对比一下条件①和要证明的式子②:
① : f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j ①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}} :fi,j+fi+1,j+1fi,j+1+fi+1,j
② : f i , j + f i + 2 , j + 1 ≤ f i , j + 1 + f i + 2 , j ②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}} :fi,j+fi+2,j+1fi,j+1+fi+2,j

两式有一些项是相同的,有一些项是不同的,不同的项用颜色标出来了。我们假设有一个不等式 T T T,使得 ① + T = ② ①+T=② +T=,现在我们试图还原出 T T T来:
① : f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j ①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}} :fi,j+fi+1,j+1fi,j+1+fi+1,j
T    : ? ≤    ? T\;:\hspace{2cm}?\leq \;? T:??
② : f i , j + f i + 2 , j + 1 ≤ f i , j + 1 + f i + 2 , j ②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}} :fi,j+fi+2,j+1fi,j+1+fi+2,j

可以看到相同的项同时在①、②式中出现,因此在 T T T中不需要管他们。
蓝色的项在②式中出现,而在①式中没有,因此应该在 T T T中被加上去,所以我们把蓝色的项写到 T T T不等号的对应侧:

① : f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j ①:f_{i,j}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}} :fi,j+fi+1,j+1fi,j+1+fi+1,j
T    : ? + f i + 2 , j + 1 ≤ ? + f i + 2 , j T\;:\hspace{0.45cm}?+\textcolor{blue}{f_{i+2,j+1}}\leq \hspace{0.725cm}?+\textcolor{blue}{f_{i+2,j}} T:?+fi+2,j+1?+fi+2,j
② : f i , j + f i + 2 , j + 1 ≤ f i , j + 1 + f i + 2 , j ②:f_{i,j}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}} :fi,j+fi+2,j+1fi,j+1+fi+2,j

可以看到红色的项原来在①中出现了,但是在②中消失了,这说明它们在 T T T中被减去了一次,也就是说带有负一的系数:

① : f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j ①:f_{i,j}\hspace{0.895cm}+\textcolor{red}{f_{i+1,j+1}}\leq f_{i,j+1}+\textcolor{red}{f_{i+1,j}} :fi,j+fi+1,j+1fi,j+1+fi+1,j
T    : − f i + 1 , j + 1 + f i + 2 , j + 1 ≤ − f i + 1 , j + f i + 2 , j T\;:\textcolor{red}{-f_{i+1,j+1}}+\textcolor{blue}{f_{i+2,j+1}}\leq \textcolor{red}{-f_{i+1,j}}+\textcolor{blue}{f_{i+2,j}} T:fi+1,j+1+fi+2,j+1fi+1,j+fi+2,j
② : f i , j + f i + 2 , j + 1 ≤ f i , j + 1 + f i + 2 , j ②:f_{i,j}\hspace{0.895cm}+\textcolor{blue}{f_{i+2,j+1}}\leq f_{i,j+1}+\textcolor{blue}{f_{i+2,j}} :fi,j+fi+2,j+1fi,j+1+fi+2,j

整理一下 T T T
T : f i + 2 , j + 1 + f i + 1 , j ≤ f i + 2 , j + f i + 1 , j + 1 T:f_{i+2,j+1}+f_{i+1,j}\leq f_{i+2,j}+f_{i+1,j+1} T:fi+2,j+1+fi+1,jfi+2,j+fi+1,j+1

这恰好就是区间长度为 j − i + 1 j-i+1 ji+1的四边形不等式,因此 ① + T = ② ①+T=② +T=,则②式得证。

至此,我们已经可以仿照刚才的证明,将四边形不等式内部的两个端点向内移动1的长度任意次,因此我们已经证明了 f i , c + f b , j + 1 ≤ f i , j + 1 + f b , c ( i ≤ b ≤ c ≤ j + 1 ) f_{i,c}+f_{b,j+1}\leq f_{i,j+1}+f_{b,c}(i\leq b\leq c\leq j+1) fi,c+fb,j+1fi,j+1+fb,c(ibcj+1)

QED.

石子合并

这篇文章只涉及简单四边形不等式优化dp,因此最优决策点都是枚举的。

石子合并求最小值

a i a_i ai表示第 i i i堆石子的大小。

首先破环为链,然后区间dp:

设状态函数 f i , j f_{i,j} fi,j为区间 [ i , j ] [i,j] [i,j]对应的石子合并成一堆的最小贡献, s s s表示石子的前缀和。

则: f i , j = min ⁡ k = i j { f i , k + f k + 1 , j } + s j − s i − 1 f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+s_j-s_{i-1} fi,j=k=iminj{fi,k+fk+1,j}+sjsi1

这里其实 k k k应该枚举到 j − 1 j-1 j1就停止的,那我们拓展一下状态,令 f x + 1 , x = − ∞ f_{x+1,x}=-\infty fx+1,x=

暴力区间dp是 O ( n 3 ) O(n^3) O(n3)的:

  for(int len=2;len<=n;len++){            区间长度
    for(int i=1,j;(j=i+len-1)<=2*n;i++){  区间端点
      for(int k=i;k<j;k++){               区间分割点
        f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
      }
    }
  }

可以优化到 O ( n 2 ) O(n^2) O(n2)

  for(int len=2; len<=n; len++){               区间长度
    for(int i=1,j; (j=i+len-1)<=2*n; i++){     区间端点
      for(int k=p[i][j-1]; k<=p[i+1][j]; k++){ 区间分割点
        if(f[i][j]>f[i][k]+f[k+1][j]+s[j]-s[i-1]) 决策单调性优化dp
          f[i][j]=f[i][k]+f[k+1][j]+s[j]-s[i-1], p[i][j]=k;
      }
    }
  }

大概的意思是说设 p i , j p_{i,j} pi,j表示 f i , j f_{i,j} fi,j的最优决策点,则 p i , j − 1 ≤ p i , j ≤ p i + 1 , j p_{i,j-1}\leq p_{i,j}\leq p_{i+1,j} pi,j1pi,jpi+1,j,我们通过把枚举决策点的区间缩小,减小了复杂度。

接下来用四步我们来看看这个过程:

  1. 证明贡献函数 w i , j w_{i,j} wi,j满足四边形不等式
  2. 证明状态函数 f i , j f_{i,j} fi,j满足四边形不等式
  3. 证明决策单调性。
  4. 证明时间复杂度 O ( n 2 ) O(n^2) O(n2)

1.证明贡献函数满足四边形不等式

四边形不等式

对于: f i , j = min ⁡ k = i j { f i , k + f k + 1 , j } + s j − s i − 1 f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+s_j-s_{i-1} fi,j=k=iminj{fi,k+fk+1,j}+sjsi1

我们定义贡献函数 w i , j = s j − s i − 1 ( w i , i 除外 ) w_{i,j}=s_j-s_{i-1}(w_{i,i}除外) wi,j=sjsi1(wi,i除外),也就是说:
f i , j = min ⁡ k = i j { f i , k + f k + 1 , j } + w i , j f_{i,j}=\overset{j}{\underset{k=i}{\min}}\left\{f_{i,k}+f_{k+1,j}\right\}+w_{i,j} fi,j=k=iminj{fi,k+fk+1,j}+wi,j

其中 f i , i = 0 , w i , i = 0 f_{i,i}=0,w_{i,i}=0 fi,i=0,wi,i=0

接下来证明 w w w满足四边形不等式:
w i , j + w i + 1 , j + 1 ≤ w i , j + 1 + w i + 1 , j w_{i,j}+w_{i+1,j+1}\leq w_{i,j+1}+w_{i+1,j} wi,j+wi+1,j+1wi,j+1+wi+1,j
即: s j − s i − 1 + s j + 1 − s i ≤ s j + 1 − s i − 1 + s j − s i s_j-s_{i-1}+s_{j+1}-s_i\leq s_{j+1}-s_{i-1}+s_j-s_i sjsi1+sj+1sisj+1si1+sjsi

左右两边直接相等了,所以肯定满足四边形不等式…

区间包含单调性

事实上,显然贡献函数还满足区间包含单调性:
w x , y ≤ w i , j ( [ x , y ] ⊆ [ i , j ] ) w_{x,y}\leq w_{i,j} ([x,y]\subseteq[i,j]) wx,ywi,j([x,y][i,j])

贡献数量

f i , j = ∑ k = 1 j − i w x k , y k f_{i,j}=\overset{j-i}{\underset{k=1}\sum}w_{x_k,y_k} fi,j=k=1jiwxk,yk,则满足 [ x k , y k ] ⊆ [ i , j ] [x_k,y_k]\subseteq[i,j] [xk,yk][i,j]

证明:
初始状态中,区间 [ i , j ] [i,j] [i,j]中有 j − i + 1 j-i+1 ji+1堆石子,每进行一次操作就会减少一堆石子,同时给 f i , j f_{i,j} fi,j增加一个 w x , y w_{x,y} wx,y,其中 [ x , y ] ⊆ [ i , j ] [x,y]\subseteq[i,j] [x,y][i,j],总共最后合并到只有一堆石子,总共合并了 j − i j-i ji次,因此状态函数贡献了 j − i j-i ji个,证毕。

上界

f i , j ≤ ( j − i ) ⋅ w i , j f_{i,j}\leq (j-i)\cdot w_{i,j} fi,j(ji)wi,j

证明:
因为: w x k , y k ≤ w i , j w_{x_k,y_k}\leq w_{i,j} wxk,ykwi,j
所以: f i , j = ∑ k = 1 j − i w x k , y k ≤ ( j − i ) ⋅ w i , j f_{i,j}=\overset{j-i}{\underset{k=1}\sum}w_{x_k,y_k}\leq (j-i)\cdot w_{i,j} fi,j=k=1jiwxk,yk(ji)wi,j

2.证明状态函数满足四边形不等式

证明 f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j f_{i,j}+f_{i+1,j+1}\leq f_{i,j+1}+f_{i+1,j} fi,j+fi+1,j+1fi,j+1+fi+1,j

首先归纳一下,假设对于所有区间长度小于 j − i + 2 j-i+2 ji+2的区间都满足状态函数上的四边形不等式。

然后我们设 f i , j + 1 f_{i,j+1} fi,j+1的最优决策点为 x x x
f i , j + 1 = f i , x + f x + 1 , j + 1 + w i , j + 1 \textcolor{blue}{f_{i,j+1}}=f_{i,x}+f_{x+1,j+1}+w_{i,j+1} fi,j+1=fi,x+fx+1,j+1+wi,j+1

我们知道 f i , j f_{i,j} fi,j的最优决策点不一定为 x x x,因此有不等式:
f i , j ≤ f i , x + f x + 1 , j + w i , j \textcolor{red}{f_{i,j}}\leq f_{i,x}+f_{x+1,j}+w_{i,j} fi,jfi,x+fx+1,j+wi,j

同理,我们设 f i + 1 , j f_{i+1,j} fi+1,j y y y,则: f i + 1 , j = f i + 1 , y + f y + 1 , j + w i + 1 , j \textcolor{blue}{f_{i+1,j}}=f_{i+1,y}+f_{y+1,j}+w_{i+1,j} fi+1,j=fi+1,y+fy+1,j+wi+1,j
考虑 f i + 1 , j + 1 f_{i+1,j+1} fi+1,j+1的最优决策点不一定为 y y y,就得到: f i + 1 , j + 1 ≤ f i + 1 , y + f y + 1 , j + 1 + w i + 1 , j + 1 \textcolor{red}{f_{i+1,j+1}}\leq f_{i+1,y}+f_{y+1,j+1}+w_{i+1,j+1} fi+1,j+1fi+1,y+fy+1,j+1+wi+1,j+1

为了凑出 f i , j + f i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j {\color{red}f_{i,j}+f_{i+1,j+1}}\leq \color{blue}f_{i,j+1}+f_{i+1,j} fi,j+fi+1,j+1fi,j+1+fi+1,j,我们需要把刚才的四个式子加起来(注意等式相加的方向):
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j + w i , j + 1 + w i + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 + w i , j + w i + 1 , j + 1 \textcolor{red}{f_{i,j}+f_{i+1,j+1}}+f_{x+1,j+1}+f_{y+1,j}+w_{i,j+1}+w_{i+1,j}\leq \textcolor{blue}{f_{i,j+1}+f_{i+1,j}}+f_{x+1,j}+f_{y+1,j+1}+w_{i,j}+w_{i+1,j+1} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1

因此现在距离要证明的结论已经相当接近了,要想办法约掉剩余的几项。

先看到贡献函数 w w w
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j + w i , j + 1 + w i + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 + w i , j + w i + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{red}{w_{i,j+1}+w_{i+1,j}}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1

可以对左边用四边形不等式 w i , j + w i + 1 , j + 1 ≤ w i , j + 1 + w i + 1 , j \textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq \textcolor{red}{w_{i,j+1}+w_{i+1,j}} wi,j+wi+1,j+1wi,j+1+wi+1,j(也可以对右边用):
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j + w i , j + w i + 1 , j + 1 ≤ f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j + w i , j + 1 + w i + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 + w i , j + w i + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{red}{w_{i,j+1}+w_{i+1,j}}\leq\\ f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+wi+1,j+1fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+1+wi+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1

然后我们研究左右那两项:
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j + w i , j + w i + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 + w i , j + w i + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}+\textcolor{blue}{w_{i,j}+w_{i+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1}+\textcolor{green}{w_{i,j}+w_{i+1,j+1}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,j+wi,j+wi+1,j+1fi,j+1+fi+1,j+fx+1,j+fy+1,j+1+wi,j+wi+1,j+1

就把贡献函数约掉了:
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+f_{x+1,j+1}+f_{y+1,j}\leq f_{i,j+1}+f_{i+1,j}+f_{x+1,j}+f_{y+1,j+1} fi,j+fi+1,j+1+fx+1,j+1+fy+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1

现在我们来研究多余的那四项状态函数:
f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1

  • x ≤ y x\leq y xy,则红色两项不交,蓝色的两项则是包含关系,就会有 f x + 1 , j + f y + 1 , j + 1 ≤ f x + 1 , j + 1 + f y + 1 , j \color{blue} f_{x+1,j}+f_{y+1,j+1}\leq f_{x+1,j+1}+f_{y+1,j} fx+1,j+fy+1,j+1fx+1,j+1+fy+1,j,因此就会有:
    f i , j + f i + 1 , j + 1 + f x + 1 , j + f y + 1 , j + 1 ≤ f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j}+f_{y+1,j+1}}\leq f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}} fi,j+fi+1,j+1+fx+1,j+fy+1,j+1fi,j+fi+1,j+1+fx+1,j+1+fy+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1
    去掉中间那个式子: f i , j + f i + 1 , j + 1 + f x , j + f y + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x,j}+f_{y+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}} fi,j+fi+1,j+1+fx,j+fy+1,j+1fi,j+1+fi+1,j+fx+1,j+fy+1,j+1

  • x > y x>y x>y,则蓝色两项不交,红色两项则是相交关系,就会有 f x + 1 , j + f y + 1 , j + 1 ≤ f x + 1 , j + 1 + f y + 1 , j \color{red}f_{x+1,j}+f_{y+1,j+1}\leq f_{x+1,j+1}+f_{y+1,j} fx+1,j+fy+1,j+1fx+1,j+1+fy+1,j,因此就会有:
    f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + f y + 1 , j + 1 ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + 1 + f y + 1 , j f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j}+f_{y+1,j+1}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j+1}+f_{y+1,j}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,jfi,j+1+fi+1,j+fx+1,j+fy+1,j+1fi,j+1+fi+1,j+fx+1,j+1+fy+1,j
    去掉中间那个式子:
    f i , j + f i + 1 , j + 1 + f x + 1 , j + 1 + f y + 1 , j ≤ f i , j + 1 + f i + 1 , j + f x + 1 , j + 1 + f y + 1 , j f_{i,j}+f_{i+1,j+1}+\textcolor{blue}{f_{x+1,j+1}+f_{y+1,j}}\leq f_{i,j+1}+f_{i+1,j}+\textcolor{red}{f_{x+1,j+1}+f_{y+1,j}} fi,j+fi+1,j+1+fx+1,j+1+fy+1,jfi,j+1+fi+1,j+fx+1,j+1+fy+1,j

可以看出无论那种情况,红蓝两项都抵消了,因此得证。
(一些什么边界情况就不考虑的了,反正显然)

后记:

  • 至于是把 x , y x,y x,y是应该带入 f i , j , f i + 1 , j + 1 f_{i,j},f_{i+1,j+1} fi,j,fi+1,j+1还是应该带入 f i + 1 , j + 1 , f i , j f_{i+1,j+1},f_{i,j} fi+1,j+1,fi,j,没有区别,很明显这两种情况是对称的。
  • 至于如果有人问如果 x , y x,y x,y不表示 f i , j + 1 , f i + 1 , j f_{i,j+1},f_{i+1,j} fi,j+1,fi+1,j的最优决策点,表示 f i , j , f i + 1 , j + 1 f_{i,j},f_{i+1,j+1} fi,j,fi+1,j+1的最优决策点行不行,答案是不行,因为不等号方向反了。
  • 感觉这种推导还是应该从条件和结论的联系上找线索。还是双向奔赴会比较容易…其实这种证明过程一般情况下结论比条件好确定…

3.证明决策单调性

p i , j p_{i,j} pi,j表示 f i , j f_{i,j} fi,j其中一个最优决策点。

决策单调性指的是, ∀ p i , j − 1 , p i + 1 , j : ∃ p i , j 满足 p i , j − 1 ≤ p i , j ≤ p i + 1 , j \forall p_{i,j-1},p_{i+1,j}:\exists p_{i,j}满足 p_{i,j-1}\leq p_{i,j}\leq p_{i+1,j} pi,j1,pi+1,j:pi,j满足pi,j1pi,jpi+1,j

左边

先证明左半部分:
p i , j − 1 ≤ p i , j p_{i,j-1}\leq p_{i,j} pi,j1pi,j,设 k = p i , j − 1 , p = p i , j k=p_{i,j-1},p=p_{i,j} k=pi,j1,p=pi,j,则我们反证,设 p < k p<k p<k

一开始可以认为我们的条件有四个式子:
{ ① : f i , j = f i , p + f p + 1 , j + w i , j ② : f i , j − 1 = f i , k + f k + 1 , j − 1 + w i , j − 1 ③ : f i , j ≤ f i , k + f k + 1 , j + w i , j ④ : f i , j − 1 ≤ f i , p + f p + 1 , j − 1 + w i , j − 1 \left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right. :fi,j=fi,p+fp+1,j+wi,j:fi,j1=fi,k+fk+1,j1+wi,j1:fi,jfi,k+fk+1,j+wi,j:fi,j1fi,p+fp+1,j1+wi,j1

然后我们为了导出矛盾,可能会有两个式子:
{ A : f i , j − 1 > f i , p + f p + 1 , j − 1 + w i , j − 1 B : f i , j ≥ f i , k + f k + 1 , j + w i , j \left\{\begin{matrix} A:f_{i,j-1}> f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\\ B:f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm} \end{matrix}\right. {A:fi,j1>fi,p+fp+1,j1+wi,j1B:fi,jfi,k+fk+1,j+wi,j
其中 A A A矛盾叫做:“ k k k不是 f i , j − 1 f_{i,j-1} fi,j1的最优决策点”。(注意,这里如果证明 p p p k k k对于 f i , j − 1 f_{i,j-1} fi,j1一样优并不能导出矛盾,因为最优决策点并不一定唯一)
其中 B B B矛盾叫做:“ k k k也是 f i , j f_{i,j} fi,j的最优决策点”。(因为综合条件③和 B B B能够知道, f i , j = f i , k + f k + 1 , j + w i , j f_{i,j}=f_{i,k}+f_{k+1,j}+w_{i,j} fi,j=fi,k+fk+1,j+wi,j,说明 k k k也是 f i , j f_{i,j} fi,j的最优决策点)

条件中没有大于号,很显然结论 B B B更容易推导。

证法1

一种平凡的证法:

已知: { ① : f i , j = f i , p + f p + 1 , j + w i , j ② : f i , j − 1 = f i , k + f k + 1 , j − 1 + w i , j − 1 ③ : f i , j ≤ f i , k + f k + 1 , j + w i , j ④ : f i , j − 1 ≤ f i , p + f p + 1 , j − 1 + w i , j − 1 \left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right. :fi,j=fi,p+fp+1,j+wi,j:fi,j1=fi,k+fk+1,j1+wi,j1:fi,jfi,k+fk+1,j+wi,j:fi,j1fi,p+fp+1,j1+wi,j1

要证: f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,jfi,k+fk+1,j+wi,j

首先是一番的推理:
首先因为最后一步已经用到了式③来证明 f i , j = f i , k + f k + 1 , j + w i , j f_{i,j}=f_{i,k}+f_{k+1,j}+w_{i,j} fi,j=fi,k+fk+1,j+wi,j,可以假设之间没有用到式③…然后因为带有不等号,所以必定含有式④:
f i , j − 1 ≤ f i , p + f p + 1 , j − 1 + w i , j − 1 f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1} fi,j1fi,p+fp+1,j1+wi,j1

然后因为还少了 f i , j , w i , j f_{i,j},w_{i,j} fi,j,wi,j,我们可以把①的右边加④的左边,把左边加到右边,这样 f i , j f_{i,j} fi,j w i , j w_{i,j} wi,j的方向就对了,就得到:
f i , j − 1 + f i , p + f p + 1 , j + w i , j ≤ f i , j + f i , p + f p + 1 , j − 1 + w i , j − 1 f_{i,j-1}+f_{i,p}+f_{p+1,j}+\textcolor{blue}{w_{i,j}}\leq \textcolor{blue}{f_{i,j}}+f_{i,p}+f_{p+1,j-1}+w_{i,j-1} fi,j1+fi,p+fp+1,j+wi,jfi,j+fi,p+fp+1,j1+wi,j1
还约掉一项 f i , p f_{i,p} fi,p f i , j − 1 + f p + 1 , j + w i , j ≤ f i , j + f p + 1 , j − 1 + w i , j − 1 f_{i,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}+w_{i,j-1} fi,j1+fp+1,j+wi,jfi,j+fp+1,j1+wi,j1

没什么想法,先把②带入进去:
f i , k + f k + 1 , j − 1 + w i , j − 1 + f p + 1 , j + w i , j ≤ f i , j + f p + 1 , j − 1 + w i , j − 1 f_{i,k}+f_{k+1,j-1}+w_{i,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1}+w_{i,j-1} fi,k+fk+1,j1+wi,j1+fp+1,j+wi,jfi,j+fp+1,j1+wi,j1
又约掉一项 w i , j − 1 w_{i,j-1} wi,j1 f i , k + f k + 1 , j − 1 + f p + 1 , j + w i , j ≤ f i , j + f p + 1 , j − 1 f_{i,k}+f_{k+1,j-1}+f_{p+1,j}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1} fi,k+fk+1,j1+fp+1,j+wi,jfi,j+fp+1,j1

现在要想办法把右侧的 f p + 1 , j − 1 f_{p+1,j-1} fp+1,j1约掉,发现可以对左边用四边形不等式:
f i , k + f k + 1 , j − 1 + f p + 1 , j + w i , j ≤ f i , j + f p + 1 , j − 1 f_{i,k}+\textcolor{blue}{f_{k+1,j-1}+f_{p+1,j}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1} fi,k+fk+1,j1+fp+1,j+wi,jfi,j+fp+1,j1
f i , k + f k + 1 , j + f p + 1 , j − 1 + w i , j ≤ f i , k + f k + 1 , j − 1 + f p + 1 , j + w i , j ≤ f i , j + f p + 1 , j − 1 f_{i,k}+\textcolor{blue}{f_{k+1,j}+f_{p+1,j-1}}+w_{i,j}\leq f_{i,k}+\textcolor{blue}{f_{k+1,j-1}+f_{p+1,j}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1} fi,k+fk+1,j+fp+1,j1+wi,jfi,k+fk+1,j1+fp+1,j+wi,jfi,j+fp+1,j1
f i , k + f k + 1 , j + f p + 1 , j − 1 + w i , j ≤ f i , j + f p + 1 , j − 1 f_{i,k}+\textcolor{blue}{f_{k+1,j}+f_{p+1,j-1}}+w_{i,j}\leq f_{i,j}+f_{p+1,j-1} fi,k+fk+1,j+fp+1,j1+wi,jfi,j+fp+1,j1

现在可以约掉 f p + 1 , j − 1 f_{p+1,j-1} fp+1,j1了:
f i , k + f k + 1 , j + w i , j ≤ f i , j f_{i,k}+f_{k+1,j}+w_{i,j}\leq f_{i,j} fi,k+fk+1,j+wi,jfi,j

QED.

证法2

一种更有技巧性的证法:
已知: { ① : f i , j = f i , p + f p + 1 , j + w i , j ② : f i , j − 1 = f i , k + f k + 1 , j − 1 + w i , j − 1 ③ : f i , j ≤ f i , k + f k + 1 , j + w i , j ④ : f i , j − 1 ≤ f i , p + f p + 1 , j − 1 + w i , j − 1 \left\{\begin{matrix} ①:f_{i,j}=f_{i,p}+f_{p+1,j}+w_{i,j}\hspace{1cm}\\ ②:f_{i,j-1}=f_{i,k}+f_{k+1,j-1}+w_{i,j-1}\\ ③:f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j}\hspace{0.9cm}\\ ④:f_{i,j-1}\leq f_{i,p}+f_{p+1,j-1}+w_{i,j-1}\hspace{0.0cm} \end{matrix}\right. :fi,j=fi,p+fp+1,j+wi,j:fi,j1=fi,k+fk+1,j1+wi,j1:fi,jfi,k+fk+1,j+wi,j:fi,j1fi,p+fp+1,j1+wi,j1

要证: f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,jfi,k+fk+1,j+wi,j

因为不等号方向不对,所以不能有③,因为式中有 w i , j w_{i,j} wi,j,所以必须把①带进去,消掉 w i , j w_{i,j} wi,j
f i , p + f p + 1 , j ≥ f i , k + f k + 1 , j f_{i,p}+f_{p+1,j}\geq f_{i,k}+f_{k+1,j} fi,p+fp+1,jfi,k+fk+1,j
f i , k + f k + 1 , j ≤ f i , p + f p + 1 , j f_{i,k}+f_{k+1,j}\leq f_{i,p}+f_{p+1,j} fi,k+fk+1,jfi,p+fp+1,j
(这是要证明的式子)
这个式子的意思就是在 f i , j f_{i,j} fi,j意义下 k k k p p p优。

而我们知道在 f i , j − 1 f_{i,j-1} fi,j1意义下 k k k p p p优: f i , k + f k + 1 , j − 1 ≤ f i , p + f p + 1 , j − 1 f_{i,k}+f_{k+1,j-1}\leq f_{i,p}+f_{p+1,j-1} fi,k+fk+1,j1fi,p+fp+1,j1

我们可以比较一下这两个式子:
条件: f i , k + f k + 1 , j − 1 ≤ f i , p + f p + 1 , j − 1 条件:f_{i,k}+\textcolor{blue}{f_{k+1,j-1}}\leq f_{i,p}+\textcolor{blue}{f_{p+1,j-1}} 条件:fi,k+fk+1,j1fi,p+fp+1,j1
结论: f i , k + f k + 1 , j ≤ f i , p + f p + 1 , j 结论:f_{i,k}+\textcolor{red}{f_{k+1,j}}\leq f_{i,p}+\textcolor{red}{f_{p+1,j}} 结论:fi,k+fk+1,jfi,p+fp+1,j

若有: 条件 + T = 结论 条件+T=结论 条件+T=结论,则 T : f p + 1 , j − 1 + f k + 1 , j ≤ f k + 1 , j − 1 + f p + 1 , j T:\textcolor{blue}{f_{p+1,j-1}}+\textcolor{red}{f_{k+1,j}}\leq \textcolor{blue}{f_{k+1,j-1}}+\textcolor{red}{f_{p+1,j}} T:fp+1,j1+fk+1,jfk+1,j1+fp+1,j,恰为四边形不等式,证毕。

因此我们知道 f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,jfi,k+fk+1,j+wi,j,而我们又知道 f i , j ≤ f i , k + f k + 1 , j + w i , j f_{i,j}\leq f_{i,k}+f_{k+1,j}+w_{i,j} fi,jfi,k+fk+1,j+wi,j,因此 f i , j = f i , k + f k + 1 , j + w i , j f_{i,j}= f_{i,k}+f_{k+1,j}+w_{i,j} fi,j=fi,k+fk+1,j+wi,j
这说明如果存在一个 p > k p>k p>k,则 k k k必然也是 f i , j f_{i,j} fi,j的最优决策点,因此只需要枚举到 k k k

右边

接下来证明右边:

要证 p i , j ≤ p i + 1 , j p_{i,j}\leq p_{i+1,j} pi,jpi+1,j,设 p = p i , j , k = p i + 1 , j p=p_{i,j},k=p_{i+1,j} p=pi,j,k=pi+1,j,就假设 p > k p>k p>k

我们仿照左边的思路,想要从“ f i + 1 , j f_{i+1,j} fi+1,j意义下 k k k更优”推出“ f i , j f_{i,j} fi,j意义下 k k k更优”。

想要证明 f i , j ≥ f i , k + f k + 1 , j + w i , j f_{i,j}\geq f_{i,k}+f_{k+1,j}+w_{i,j} fi,jfi,k+fk+1,j+wi,j,即:
结论 : f i , k + f k + 1 , j ≤ f i , p + f p + 1 , j 结论:f_{i,k}+f_{k+1,j} \leq f_{i,p}+f_{p+1,j} 结论:fi,k+fk+1,jfi,p+fp+1,j

我们知道对于 f i + 1 , j f_{i+1,j} fi+1,j来说, k k k优于 p p p
条件 : f i + 1 , k + f k + 1 , j ≤ f i + 1 , p + f p + 1 , j 条件:f_{i+1,k}+f_{k+1,j}\leq f_{i+1,p}+f_{p+1,j } 条件:fi+1,k+fk+1,jfi+1,p+fp+1,j

设: 条件 + T = 结论 条件+T=结论 条件+T=结论,用还原不等式的方法求出 T T T T T T恰是四边形不等式。

4.证明时间复杂度

枚举决策点的总次数约为:
∑ l e n = 1 n ∑ i = 1 2 n − l e n + 1 p i + 1 , i + l e n − 1 − p i , i + l e n − 2 + 1 {\overset{n}{\underset{len=1}\sum}}{\overset{2n-len+1}{\underset{i=1}\sum}}p_{i+1,i+len-1}-p_{i,i+len-2}+1 len=1ni=12nlen+1pi+1,i+len1pi,i+len2+1
≤ ∑ l e n = 1 n ∑ i = 1 2 n p i + 1 , i + l e n − 1 − p i , i + l e n − 2 + 1 \leq {\overset{n}{\underset{len=1}\sum}}{\overset{2n}{\underset{i=1}\sum}}p_{i+1,i+len-1}-p_{i,i+len-2}+1 len=1ni=12npi+1,i+len1pi,i+len2+1
= ∑ l e n = 1 n ( ∑ i = 1 2 n p i + 1 , i + l e n − 1 − ∑ i = 1 2 n p i , i + l e n − 2 ) + n = {\overset{n}{\underset{len=1}\sum}}\left({\overset{2n}{\underset{i=1}\sum}}p_{i+1,i+len-1}-{\overset{2n}{\underset{i=1}\sum}}p_{i,i+len-2}\right)+n =len=1n(i=12npi+1,i+len1i=12npi,i+len2)+n
= ∑ l e n = 1 n ( ∑ i = 2 2 n + 1 p i , i + l e n − 2 − ∑ i = 1 2 n p i , i + l e n − 2 ) + n = {\overset{n}{\underset{len=1}\sum}}\left({\overset{2n+1}{\underset{i=2}\sum}}p_{i,i+len-2}-{\overset{2n}{\underset{i=1}\sum}}p_{i,i+len-2}\right)+n =len=1n(i=22n+1pi,i+len2i=12npi,i+len2)+n
= ∑ l e n = 1 n p 2 n + 1 , 2 n + l e n − 1 − p 1 , l e n − 1 + n = {\overset{n}{\underset{len=1}\sum}}p_{2n+1,2n+len-1}-p_{1,len-1}+n =len=1np2n+1,2n+len1p1,len1+n
= ∑ l e n = 1 n O ( n ) = {\overset{n}{\underset{len=1}\sum}}O(n) =len=1nO(n)
= O ( n 2 ) =O(n^2) =O(n2)

转移复杂度为 O ( 1 ) O(1) O(1),因此证完。

石子合并求最大值

原来的代码:

 for(int len=2;len<=n;len++){             区间长度
    for(int i=1,j;(j=i+len-1)<=2*n;i++){  区间端点
      for(int k=i;k<j;k++){               区间分割点
        g[i][j]=max(g[i][j],g[i][k]+g[k+1][j]+s[j]-s[i-1]);
      }
    }
  }

新的代码:

  for(int len=2; len<=n; len++){               区间长度
    for(int i=1,j; (j=i+len-1)<=2*n; i++){     区间端点
      g[i][j]=max(g[i][j-1],g[i+1][j])+s[j]-s[i-1];
    }
  }

因为最大值的最优决策一定能在两端取得,也即:
g i , j = max ⁡ { g i , j − 1 , g i + 1 , j } + w i , j g_{i,j}=\max\{g_{i,j-1},g_{i+1,j}\}+w_{i,j} gi,j=max{gi,j1,gi+1,j}+wi,j

证明

*请注意接下来证明中“左”和“左”的区别,对于区间 [ i , j ] = [ i , k ] + [ k + 1 , j ] [i,j]=[i,k]+[k+1,j] [i,j]=[i,k]+[k+1,j],左端指的是 [ i , i ] [i,i] [i,i],而左侧指的是 [ i , k ] [i,k] [i,k]

要证明最大值的最优决策一定会在两端取得,可以考虑 g i , j g_{i,j} gi,j的最优决策,因此归纳所有区间长度小于 j − i + 1 j-i+1 ji+1的区间全都符合假设:

反证,假设端点不是最优决策点(反论题),设最优决策点为 k ( i < k < j − 1 ) k(i<k<j-1) k(i<k<j1),则:
g i , j = g i , k + g k + 1 , j + w i , j g_{i,j}=g_{i,k}+g_{k+1,j}+w_{i,j} gi,j=gi,k+gk+1,j+wi,j

现在考虑区间 g i , k g_{i,k} gi,k,我们知道 g i , k g_{i,k} gi,k的最优决策一定在其两端取得。假设在左取得,则 g i , j = g i + 1 , k + w i , k + g k + 1 , j + w i , j g_{i,j}=g_{i+1,k}+w_{i,k}+g_{k+1,j}+w_{i ,j} gi,j=gi+1,k+wi,k+gk+1,j+wi,j

我们可以构造一种方案,先把 [ i + 1 , k ] [i+1,k] [i+1,k] [ k + 1 , j ] [k+1,j] [k+1,j]合并,再把 [ i + 1 , j ] [i+1,j] [i+1,j] [ i , i ] [i,i] [i,i]合并,贡献就是:
g i , j ′ = g i + 1 , k + g k + 1 , j + w i + 1 , j + w i , j g'_{i,j}=g_{i+1,k}+g_{k+1,j}+w_{i+1,j}+w_{i,j} gi,j=gi+1,k+gk+1,j+wi+1,j+wi,j

对比 g i , j g_{i,j} gi,j和这个式子:
g i , j = g i + 1 , k + w i , k + g k + 1 , j + w i , j g_{i,j}=g_{i+1,k}+\textcolor{blue}{w_{i,k}}+g_{k+1,j}+w_{i ,j} gi,j=gi+1,k+wi,k+gk+1,j+wi,j
g i , j ′ = g i + 1 , k + w i + 1 , j + g k + 1 , j + w i , j g'_{i,j}=g_{i+1,k}+\textcolor{red}{w_{i+1,j}}+g_{k+1,j}+w_{i,j} gi,j=gi+1,k+wi+1,j+gk+1,j+wi,j

w i , k ≤ w i + 1 , j \textcolor{blue}{w_{i,k}}\leq \textcolor{red}{w_{i+1,j}} wi,kwi+1,j
则显然, g i , j ≥ g i , j ′ g_{i,j}\geq g'_{i,j} gi,jgi,j,则说明 i i i也是最优决策点(由于假设 g i , j g_{i,j} gi,j),与反论题矛盾.

否则: w i , k > w i + 1 , j \textcolor{blue}{w_{i,k}}>\textcolor{red}{w_{i+1,j}} wi,k>wi+1,j
即: a i > w k + 1 , j \textcolor{blue}{a_i}>\textcolor{red}{w_{k+1,j}} ai>wk+1,j

(说明右侧所有石子的大小加起来还没有 a i a_i ai大)
此时我们构造一种方案:

先把 [ i , k ] [i,k] [i,k]合并好, [ k + 1 , j ] [k+1,j] [k+1,j]区间保留原始的样子,然后把右侧的石子依次逐个加入左边的堆中,这种方案的总贡献为:
g i , j ′ ′ = g i , k + ( ∑ t = k + 1 j − 1 w i , t ) + w i , j ≥ g i , k + ( j − k − 1 ) ⋅ a i + w i , j > g i , k + ( j − k − 1 ) ⋅ w k + 1 , j + w i , j g''_{i,j}=g_{i,k}+\left(\overset{j-1}{\underset{t=k+1}\sum}w_{i,t}\right)+w_{i,j}\geq g_{i,k}+(j-k-1)\cdot \textcolor{blue}{a_i}+w_{i,j}\textcolor{black}> g_{i,k}+(j-k-1)\cdot \textcolor{red}{w_{k+1,j}}+w_{i,j} gi,j′′=gi,k+(t=k+1j1wi,t)+wi,jgi,k+(jk1)ai+wi,j>gi,k+(jk1)wk+1,j+wi,j

而我们知道 g g g函数也像 f f f一样具有上界:
g k + 1 , j ≤ ( j − k − 1 ) ⋅ w k + 1 , j \color{red}g_{k+1,j}\leq (j-k-1)\cdot w_{k+1,j} gk+1,j(jk1)wk+1,j

因此:
g i , j ′ ′ > g i , k + ( j − k − 1 ) ⋅ w k + 1 , j + w i , j ≥ g i , k + g k + 1 , j + w i , j = g i , j g''_{i,j}> g_{i,k}+\textcolor{red}{(j-k-1)\cdot w_{k+1,j}}+w_{i,j}\textcolor{red}{\geq} g_{i,k}+\textcolor{red}{g_{k+1,j}}+w_{i,j}=g_{i,j} gi,j′′>gi,k+(jk1)wk+1,j+wi,jgi,k+gk+1,j+wi,j=gi,j

此时, g i , j ′ ′ > g i , j g''_{i,j}>g_{i,j} gi,j′′>gi,j,证明新方案严格优于原方案,说明 k k k不是最优决策点,矛盾。

大概意思就是说,对于区间 [ i , k ] [i,k] [i,k]的最优决策点在其左的情况,假如说 w i , k ≤ w i + 1 , j w_{i,k}\leq w_{i+1,j} wi,kwi+1,j,则 [ i , j ] [i,j] [i,j]的左端点必然为最优决策点,矛盾。否则, [ i , j ] [i,j] [i,j]的右端点比 k k k更优, k k k不为最优决策点,矛盾。

同理可证明,当区间 [ k + 1 , j ] [k+1,j] [k+1,j]的最优决策点在其右端取得时,也会产生矛盾。

因此,根据现在的证明,在反论题成立的情况下,区间 [ i , k ] [i,k] [i,k]的最优决策点为其右端点,而区间 [ k + 1 , j ] [k+1,j] [k+1,j]的最优决策点为其左端点。

接下来证明这种情况不存在。

我们讨论区间 [ i , k ] \color{blue}[i,k] [i,k]和区间 [ k + 1 , j ] \color{red}[k+1,j] [k+1,j]
我们已经知道了 [ i , k ] \color{blue}[i,k] [i,k]的最优决策点是 k k k
g i , k = g i , k − 1 + w i , k \color{blue} g_{i,k}=g_{i,k-1}+w_{i,k} gi,k=gi,k1+wi,k
同理我们知道 [ k + 1 , j ] \color{red}[k+1,j] [k+1,j]的最优决策点是 k + 1 k+1 k+1
g k + 1 , j = g k + 2 , j + w k + 1 , j \color{red} g_{k+1,j}=g_{k+2,j}+w_{k+1,j} gk+1,j=gk+2,j+wk+1,j

总的贡献是:
g i , j = g i , k + g k + 1 , j + w i , j = g i , k − 1 + w i , k + g k + 2 , j + w k + 1 , j + w i , j g_{i,j}=\textcolor{blue}{g_{i,k}}+\textcolor{red}{g_{k+1,j}}+w_{i,j}=\textcolor{blue}{g_{i,k-1}+w_{i,k}}+\textcolor{red}{g_{k+2,j}+w_{k+1,j}}+w_{i,j} gi,j=gi,k+gk+1,j+wi,j=gi,k1+wi,k+gk+2,j+wk+1,j+wi,j

这时候我们再构造另一种方案,先把 [ k , k ] [k,k] [k,k]合并到 [ i , k − 1 ] \color{blue}[i,k-1] [i,k1]中,然后再把 [ k + 1 , k + 1 ] [k+1,k+1] [k+1,k+1]加入到 [ i , k ] \color{blue}[i,k] [i,k]中,最后再把 [ i , k + 1 ] \color{blue}[i,k+1] [i,k+1] [ k + 2 , j ] \color{red}[k+2,j] [k+2,j]合并,这样做的贡献是:
g i , j ′ = 2 ⋅ g i , k − 1 + w i , k + w i , k + 1 + g k + 2 , j + w k + 2 , j + w i , j = 2 ⋅ g i , k − 1 + 2 ⋅ w i , k + g k + 2 , j + w k + 1 , j + w i , j ≥ g i , j g'_{i,j}=\textcolor{blue}{2\cdot g_{i,k-1}+w_{i,k}+w_{i,k+1}}+\textcolor{red}{g_{k+2,j}+w_{k+2,j}}+w_{i,j}=\textcolor{blue}{2\cdot g_{i,k-1}+2\cdot w_{i,k}}+\textcolor{red}{g_{k+2,j}+w_{k+1,j}}+w_{i,j}\geq g_{i,j} gi,j=2gi,k1+wi,k+wi,k+1+gk+2,j+wk+2,j+wi,j=2gi,k1+2wi,k+gk+2,j+wk+1,j+wi,jgi,j

因为有假设最优决策点是 k k k,就会有 g i , j ≥ g i , j ′ g_{i,j}\geq g'_{i,j} gi,jgi,j,因此 g i , j = g i , j ′ g_{i,j}=g'_{i,j} gi,j=gi,j
这样就说明 k − 1 k-1 k1这个位置也是最优决策点。
同理说明 k − 2 k-2 k2也是最优决策点…说明 k − 3 k-3 k3也是最优决策点…因此说明 i i i是区间 [ i , j ] [i,j] [i,j]最优决策点。与假设矛盾。

*注意这里证明左端点是最优决策点是为了导出矛盾,是在说明在反论题成立的情况下,这种情况不存在,而不是真的说明左端点永远是最优决策点。
(其实这时候甚至能证明出区间中的每一个点都是最优决策点。但是我们的假设是“假定两端不是最优决策点”,因此只要证出来两端是最优决策点就矛盾了)

因此反论题为假命题。

QED.

一种说法是 g i , j g_{i,j} gi,j的最优决策点一定取自 a i , a j a_i,a_j ai,aj中较小的那一端,这种说法是错误的。

题解视频

简单四边形不等式优化dp(下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办

方法1&#xff1a; 在mybatis核心配置文件中指定&#xff0c;springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置&#xff0c;本来就省掉了mybatis的核心配置文件&#xff0c;现在又加回去算什么事&#xff0c;总之这种方式可行但没人这样用 具体操作&…

c语言进阶部分详解(指针初阶)

大家好&#xff01;&#xff0c;前段时间一直在准备数学建模竞赛&#xff0c;现在也是忙完了。抓紧继续给大家带来c语言的内容。今天给大家带来指针初阶部分的讲解 当我们谈论C语言中的指针时&#xff0c;实际上是在讨论一种非常重要的概念&#xff0c;因为指针是C语言的核心之…

《昆明海晏村:修缮后的新生,历史与现代的完美交融》

在昆明市的东南角&#xff0c;有一处名为海晏村的地方&#xff0c;这里曾是滇池北岸的重要码头&#xff0c;也是滇池文化的发源地之一。近年来&#xff0c;海晏村经过精心修缮&#xff0c;焕发出新的生机&#xff0c;成为了一个集历史、文化、艺术于一体的旅游胜地。那么&#…

Harp:面向跨空间域的分布式事务优化算法

Harp&#xff1a;面向跨空间域的分布式事务优化算法 庄琪钰1,2&#xff0c;李彤1,2&#xff0c;卢卫1,2, 杜小勇1,2 1 中国人民大学信息学院&#xff0c;北京 100872 2 数据工程与知识工程教育部重点实验室&#xff0c;北京 100872 摘要&#xff1a;近数据计算范式驱动了银行、…

whee: 美图秀秀出品AI绘画图片创作工具平台

【 产品介绍】 whee.com还提供了风格模型训练和创作词库的功能&#xff0c;让用户可以定制自己的专属风格和词汇。whee.com是一个适合各种水平和兴趣的用户的创意平台&#xff0c;无论是想要学习绘画&#xff0c;还是想要展示自己的才华&#xff0c;都可以在whee.com找到乐趣和…

openpnp - 给.openpnp2目录减肥

文章目录 openpnp - 给.openpnp2目录减肥概述笔记不会引起.openpnp2目录size持续增加的目录/文件列表会引起.openpnp2目录size持续增加的目录/文件列表可以做一个程序来给openpnp减肥END openpnp - 给.openpnp2目录减肥 概述 听同学说, 如果.openpnp2将磁盘分区都占满后, 就会…

【word日常操作】word里面表格已经设置了重复标题行,但是显示无效怎么办

在制作表格的过程当中&#xff0c;相信很多人都知道&#xff0c;表格不只有一页的时候就会在下一面&#xff0c;也会显示出来&#xff0c;然而这时我们需要让word表头重复出现&#xff0c;那么该怎么办呢? 1 出现问题 word表格如何设置多页时能重复表头&#xff0c;百度后出…

ElasticSearch系列-索引原理与数据读写流程详解

索引原理 倒排索引 倒排索引&#xff08;Inverted Index&#xff09;也叫反向索引&#xff0c;有反向索引必有正向索引。通俗地来讲&#xff0c;正向索引是通过key找value&#xff0c;反向索引则是通过value找key。ES底层在检索时底层使用的就是倒排索引。 索引模型 现有索…

01- 从零开始完整实现-循环神经网络RNN

一 简介 使用 pytorch 搭建循环神经网络RNN&#xff0c;循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类用于 处理序列数据的神经网络架构。与传统神经网络不同&#xff0c;RNN 具有内部循环结构&#xff0c;可以在处理序列数据时保持状态…

Qwen7b微调保姆级教程

前方干货预警&#xff1a;这可能是你能够找到的&#xff0c;最容易理解&#xff0c;最容易跑通的&#xff0c;适用于各种开源LLM模型的&#xff0c;同时支持多轮和单轮对话数据集的大模型高效微调范例。 我们构造了一个修改大模型自我认知的3轮对话的玩具数据集&#xff0c;使用…

HONEYWELL 05704-A-0145 工控控制模块

HONEYWELL 05704-A-0145 工控控制模块&#xff08;Industrial Control Module&#xff09;是工业自动化领域中的一种关键组件&#xff0c;用于控制和监测各种工业过程和设备。这些模块具有多种特点和功能&#xff0c;以下是一些通常与HONEYWELL 05704-A-0145 工控控制模块相关的…

态路小课堂丨光纤跳线的使用与维护小指南

点击蓝字 | 关注我们 TARLUZ态路 在光通信领域中&#xff0c;光纤跳线扮演着至关重要的角色。它作为一种用于连接光纤设备之间的光纤连接线&#xff0c;可以根据实际需求进行定制&#xff0c;以此来满足不同网络拓扑和连接方式的要求。在安装光纤跳线时&#xff0c;遇到的问题…

3ds max文件打包?max插件CG Magic一键打包整起!

3ds max文件如何打包&#xff1f;这个问题&#xff0c;小编听到不少网友的提问&#xff01; 今天CG Magic小编来和大家聊聊&#xff0c;文件更高效的操作&#xff0c;如何打包处理呢&#xff1f; 3DMAX这款软件的受众群体是比较高的&#xff0c;在工作方便的同时&#xff0c;…

Qt ---进程间的通信

进程间通讯方式Qt 提供了四种进程间通信的方式&#xff1a; 使用共享内存&#xff08;shared memory&#xff09;交互&#xff1a;这是Qt 提供的一种各个平台均有支持的进程间交互的方式。TCP/IP&#xff1a;其基本思想就是将同一机器上面的两个进程一个当做服务器&#xff0c…

24考研王道408数据结构-第三章“栈、队列、数组”课后算法题(P70--栈的模拟)

第三题 #include<iostream> using namespace std;bool solution(char s[]){int n8;int numI0;for(int i0;i<n;i){if(s[i]I){numI;}if(s[i]O){if(numI0){return false;}numI--;}}return true; }int main(){//char s[8]{I,O,I,I,O,I,O,O};char s[8]{I,O,O,I,O,I,I,O};if…

电压放大器的应用范围有哪些

电压放大器是一种常见的电子设备&#xff0c;用于将输入信号的电压放大到更高的水平。它在各个领域中具有广泛的应用范围。本文将详细介绍电压放大器的应用。 音频放大器&#xff1a; 电压放大器在音频系统中起着重要作用&#xff0c;用于将来自音源&#xff08;如CD播放器、MP…

Mybatis 动态语言 - mybatis-thymeleaf

前面我们介绍了Mybatis动态SQL的使用&#xff1b;本篇我们介绍使用mybatis-thymeleaf动态语言生成动态SQL。 如果您对Mybatis动态SQL不太了解&#xff0c;建议您先进行了解后再阅读本篇&#xff0c;可以参考&#xff1a; Mybatis 动态SQL – 使用if,where标签动态生成条件语句…

为什么有人会先考二建再考一建?

因为时间&#xff0c;因为难度&#xff0c;因为需求。 首先说时间&#xff0c;考二建比考一建的限制少很多&#xff0c;很多人入职没多久&#xff0c;研究生甚至在大学就能考了。本着早考早有证&#xff0c;早考早赚钱的原则&#xff0c;很多人会选择先考二建。 再说难度&…

Jmeter —— 常用的几种断言方法(基本用法)

在使用JMeter进行性能测试或者接口自动化测试工作中&#xff0c;经常会用到的一个功能&#xff0c;就是断言&#xff0c;断言相当于检查点&#xff0c;它是用来判断系统返回的响应结果是否正确&#xff0c;以此帮我们判断测试是否通过&#xff0c;本文 主要介绍几种常用的断言&…

【Spring使用三级缓存解决循环依赖的过程】

testService1和testService2相互依赖 当Spring创建testService1对象时&#xff0c;它会先从一级缓存中查找是否存在testService1的实例。如果缓存中不存在testService1实例&#xff0c;它将继续查找二级缓存中是否存在testService1。如果二级缓存中也不存在testService1实例&…