四边形不等式,决策单调性优化 DP

四边形不等式
任意 a ≤ b ≤ c ≤ d a\le b\le c\le d abcd,有 w ( a , d ) + w ( b , c ) ≥ w ( a , c ) + w ( b , d ) w(a,d)+w(b,c)\ge w(a,c)+w(b,d) w(a,d)+w(b,c)w(a,c)+w(b,d)


一维 D P DP DP 的优化
对于转移方程 f i = m i n ( f j + v a l ( j , i ) ) f_i=min(f_j+val(j,i)) fi=min(fj+val(j,i))
p i p_i pi f i f_i fi 的最优决策点
v a l val val 满足四边形不等式,则 f f f 具有决策单调性

证明:
首先 p i p_i pi 是最优的
f p i + v a l ( p i , i ) ≤ f j + v a l ( j , i ) . . . 1 f_{p_i}+val(p_i,i)\le f_j+val(j,i)...1 fpi+val(pi,i)fj+val(j,i)...1
推广到 i + 1 i+1 i+1
想要证: f p i + v a l ( p i , i + 1 ) ≤ f j + v a l ( j , i + 1 ) f_{p_i}+val(p_i,i+1)\le f_j+val(j,i+1) fpi+val(pi,i+1)fj+val(j,i+1)
考虑到
v a l ( j , i + 1 ) + v a l ( p i , i ) ≥ v a l ( j , i ) + v a l ( p i , i + 1 ) val(j,i+1)+val(p_i,i)\ge val(j,i)+val(p_i,i+1) val(j,i+1)+val(pi,i)val(j,i)+val(pi,i+1)

v a l ( p i , i + 1 ) − v a l ( p i , i ) ≤ v a l ( j , i + 1 ) − v a l ( j , i ) val(p_i,i+1)-val(p_i,i)\le val(j,i+1)-val(j,i) val(pi,i+1)val(pi,i)val(j,i+1)val(j,i)
加到 1 1 1
f p i + v a l ( p i , i + 1 ) ≤ f j + v a l ( j , i + 1 ) f_{p_i}+val(p_i,i+1)\le f_j+val(j,i+1) fpi+val(pi,i+1)fj+val(j,i+1)

如何维护?
考虑一个 i i i 能作为哪些决策点的最优决策点
我们可以维护一个 [ 1 , n ] [1,n] [1,n] 的数组,存每一个点的最优决策点
根据决策单调性,我们最后一定能找到一个 p o s pos pos,使得 p o s pos pos 后面的决策用 i i i 更优
考虑用一个三元组 ( i , l , r ) (i,l,r) (i,l,r) 表示 [ l , r ] [l,r] [l,r] 都以 i i i 为最优决策
每次找到 p o s pos pos 之后,插入 ( i , p o s , n ) (i,pos,n) (i,pos,n) 即可
如何找到 p o s pos pos
更队尾的三元组的 l l l 比较,如果更优,显然这个三元组没有用
如果不是更优,那么显然转折点在 ( l , r ] (l,r] (l,r] 内,二分这个位置即可
然后队头动态弹掉 [ 1 , i − 1 ] [1,i-1] [1,i1] 的决策,取出来的队头就是 i i i 的决策点了
复杂度 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))


二维 D P DP DP 的优化
性质1:对于方程 f l , r = f l , p + f p + 1 , r + w ( i , j ) f_{l,r}=f_{l,p}+f_{p+1,r}+w(i,j) fl,r=fl,p+fp+1,r+w(i,j)
w w w 满足四边形不等式且任意 a ≤ b ≤ c ≤ d a\le b\le c\le d abcd w ( a , d ) ≥ w ( b , c ) w(a,d)\ge w(b,c) w(a,d)w(b,c)
那么 f f f 也满足四边形不等式

证明:
要证 对于任意 i , j ( i < j ) i,j(i<j) i,j(i<j), f [ i ] [ j ] + f [ i + 1 ] [ j + 1 ] ≤ f [ i + 1 ] [ j ] + f [ i ] [ j + 1 ] f[i][j]+f[i+1][j+1]\le f[i+1][j]+f[i][j+1] f[i][j]+f[i+1][j+1]f[i+1][j]+f[i][j+1]

考虑归纳证明:
f [ i + 1 ] [ j ] f[i+1][j] f[i+1][j]取得最优值的时候 k = x k=x k=x
f [ i ] [ j + 1 ] f[i][j+1] f[i][j+1]取得最优值的时候 k = y k=y k=y
x ≤ y x \le y xy
k = x , k = y k=x,k=y k=x,k=y代入
f [ i ] [ x ] + f [ x + 1 ] [ j ] + w ( i , j ) + f [ i + 1 ] [ y ] + f [ y + 1 ] [ j + 1 ] + w ( i + 1 , j + 1 ) f[i][x]+f[x+1][j]+w(i,j)+f[i+1][y]+f[y+1][j+1]+w(i+1,j+1) f[i][x]+f[x+1][j]+w(i,j)+f[i+1][y]+f[y+1][j+1]+w(i+1,j+1)
考虑到 w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i , j + 1 ) + w ( i + 1 , j ) w(i,j)+w(i+1,j+1)\le w(i,j+1)+w(i+1,j) w(i,j)+w(i+1,j+1)w(i,j+1)+w(i+1,j)
继续替换右边
f [ i + 1 ] [ x ] + f [ x + 1 ] [ j ] + w ( i + 1 , j ) + f [ i ] [ y ] + f [ y + 1 ] [ j + 1 ] + w ( i , j + 1 ) f[i+1][x]+f[x+1][j]+w(i+1,j)+f[i][y]+f[y+1][j+1]+w(i,j+1) f[i+1][x]+f[x+1][j]+w(i+1,j)+f[i][y]+f[y+1][j+1]+w(i,j+1)
又由归纳假设
f [ i ] [ x ] + f [ i + 1 ] [ y ] ≤ f [ i + 1 ] [ x ] + f [ i ] [ y ] f[i][x]+f[i+1][y]\le f[i+1][x]+f[i][y] f[i][x]+f[i+1][y]f[i+1][x]+f[i][y]
w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i + 1 , j ) + w ( i , j + 1 ) w(i,j)+w(i+1,j+1)\le w(i+1,j)+w(i,j+1) w(i,j)+w(i+1,j+1)w(i+1,j)+w(i,j+1)
所以 f [ i ] [ j ] + f [ i + 1 ] [ j + 1 ] ≤ f [ i + 1 ] [ j ] + f [ i ] [ j + 1 ] f[i][j]+f[i+1][j+1]\le f[i+1][j]+f[i][j+1] f[i][j]+f[i+1][j+1]f[i+1][j]+f[i][j+1]
对于 x > y x>y x>y 的情况同理

性质 2:
p [ i ] [ j ] p[i][j] p[i][j] [ i , j ] [i,j] [i,j] 的决策点
f f f 满足四边形不等式,则 p [ i ] [ j − 1 ] ≤ p [ i ] [ j ] ≤ p [ i + 1 ] [ j ] p[i][j-1]\le p[i][j] \le p[i+1][j] p[i][j1]p[i][j]p[i+1][j]

对于一个决策点 k ∈ ( i , p ] k\in(i,p] k(i,p]
f [ i ] [ p ] + f [ i + 1 ] [ k ] ≥ f [ i ] [ k ] + f [ i + 1 ] [ p ] f[i][p]+f[i+1][k]\ge f[i][k]+f[i+1][p] f[i][p]+f[i+1][k]f[i][k]+f[i+1][p]
f [ i + 1 ] [ k ] − f [ i + 1 ] [ p ] ≥ f [ i ] [ k ] − f [ i ] [ p ] f[i+1][k]-f[i+1][p]\ge f[i][k]-f[i][p] f[i+1][k]f[i+1][p]f[i][k]f[i][p]
p p p 是最优决策点,又有
f [ i ] [ k ] + f [ k + 1 ] [ j ] ≥ f [ i ] [ p ] + f [ p + 1 ] [ j ] f[i][k]+f[k+1][j]\ge f[i][p]+f[p+1][j] f[i][k]+f[k+1][j]f[i][p]+f[p+1][j]
想要推广到 i + 1 i+1 i+1
f [ i + 1 ] [ k ] + f [ k + 1 ] [ j ] − ( f [ i + 1 ] [ p ] + f [ p + 1 ] [ j ] ) = ( f [ i + 1 ] [ k ] − f [ i + 1 ] [ p ] ) + ( f [ k + 1 ] [ j ] − f [ p + 1 ] [ j ] ) ≥ f [ i ] [ k ] − f [ i ] [ p ] + f [ k + 1 ] [ j ] − f [ p + 1 ] [ j ] ≥ 0 f[i+1][k]+f[k+1][j]-(f[i+1][p]+f[p+1][j])=(f[i+1][k]-f[i+1][p])+(f[k+1][j]-f[p+1][j])\ge f[i][k]-f[i][p]+f[k+1][j]-f[p+1][j]\ge 0 f[i+1][k]+f[k+1][j](f[i+1][p]+f[p+1][j])=(f[i+1][k]f[i+1][p])+(f[k+1][j]f[p+1][j])f[i][k]f[i][p]+f[k+1][j]f[p+1][j]0
所以对于 f [ i + 1 ] [ j ] f[i+1][j] f[i+1][j] p p p 比任意 k ≤ p [ i ] [ j ] k\le p[i][j] kp[i][j] 优,因此 p [ i + 1 ] [ j ] ≥ p [ i ] [ j ] p[i+1][j]\ge p[i][j] p[i+1][j]p[i][j]
另一边同理
所以 p [ i ] [ j − 1 ] ≤ p [ i ] [ j ] ≤ p [ i + 1 ] [ j ] p[i][j-1]\le p[i][j] \le p[i+1][j] p[i][j1]p[i][j]p[i+1][j]

对每一个贡献求和 ∑ p [ i + 1 ] [ j ] − p [ i ] [ j − 1 ] = O ( n 2 ) \sum p[i+1][j]-p[i][j-1]=O(n^2) p[i+1][j]p[i][j1]=O(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值