四边形不等式优化DP

四边形不等式优化DP

定义

1.原始定义

假设有一个二元函数(w(x,y)),如果对于任意(a leq b leq c leq d),有

[w(a, d) + w(b, c) geq w(a, c) + w(b, d) ]

就说函数(w)满足四边形不等式

2.等价定义

还有一个等价的定义:如果对于任意(aleq b),有:

[w(a, b + 1) + w(a + 1, b) geq w(a, b) + w(a + 1, b + 1) ]

就说函数(w)满足四边形不等式、

证明 2 -> 1

对于任意(a < c), 有 ((1))式:

[w(a, c + 1) + w(a + 1, c) geq w(a, c) + w(a + 1, c + 1) ]

对于任意(a+1, c),有((2))式:

[w(a + 1, c + 1) + w(a + 2, c) >= w(a + 1, c) + w(a + 2, c + 1) ]

两式相加得到((3))式:

[w(a, c + 1) + w(a + 2, c) geq w(a, c) + w(a + 2, c + 1) ]

对比((1))式和((3))式,发现(a + 1)可以扩成(a + 2),同理(a+2)可以扩成(a+3)(a+3)可以扩成(a+4)……可以一直扩大直至(bleq c)(b)是在(a)(c)之间的一个数),从而得到:

[w(a, c + 1) + w(b, c) geq w(a, c) + w(b, c + 1) ]

同理,对于任意(a<c+1),有((4))式:

[w(a, c + 2) + w(a + 1, c + 1) geq w(a, c + 1) + w(a + 1, c + 2) ]

((1))式与((4))式相加得到((5))式:

[w(a, c + 2) + w(a + 1, c) geq w(a, c) + w(a + 1, c + 2) ]

((1))式进行一下直观对比:

((1))式:(w(a, c + 1) + w(a + 1, c) geq w(a, c) + w(a + 1, c + 1))

((5))式:(w(a, c + 2) + w(a + 1, c) geq w(a, c) + w(a + 1, c + 2))

可以发现(c+1)可以扩成(c+2),同理(c+2)可以扩成(c+3)(c+3)可以扩成(c+4)……可以一直扩大一直到(d(cleq d)),从而得到:

[w(a,d) + w(a + 1, c) geq w(a, c) + w(a + 1, d) ]

再把上式(a+1)扩大到(b),保证(aleq b leq c leq d),就可以得到(1),即

(w(a,d) + w(b, c) geq w(a, c) + w(b, d))

由此原始定义得证。

所以,证了这么久有啥用呢?

决策单调性

我们在做(DP)时经常会遇见这样的(DP)方程

[dp[i] = min/max{dp[j] + cost(j, i)} ]

这样的(DP)方程被称作(1D/1D)动态规划,(cost(i,j))决定着优化策略选择

决策单调性定理

如果函数(cost(i,j))满足四边形不等式,则(dp[i])有决策单调性(充分条件)

证明:

注:假设此时已经满足四边形不等式

假设此时的(DP)方程为(dp[i] = min{dp[j] + cost(j, i)})(dp[i])的决策点是(p[i]),对于(j < p[i] - 1(j < i)),根据最优性:

[dp[p[i]] + cost(p[i], i) leq dp[j] + cost(j, i) ]

假设(i' > i),此时(j leq p[i] leq i leq i'),根据四边形不等式:

[cost(j, i') + cost(p[i], i) geq cost(j, i) + cost(p[i], i') ]

对这个式子进行移项,得到

[cost(p[i], i') - cost(p[i], i) leq cost(j, i') - cost(j, i) ]

将此式和(DP)式(根据最优性得出的式子)相加得:

[dp[p[i]] + cost(p[i], i') leq dp[j] + cost(j, i') ]

由此可得,对于(i')来说,(p[i])(j)优,得证。

小小结

在上面的证明中我们可以知道,等价定义可以推出原始定义,而原始定义又可以推出决策单调性定理,其实在日常做题中,如果满足了等价定义,我们就可以直接用决策单调性来解决问题(就是说(2)可以推出(1)(1)可以推出(3),那么(2)可以推出(3)

下面就来看一道例题吧

例题

链接:洛谷P3515 [POI2011]Lightning Conductor

题目很简洁,就是为了找这么一个数(p)满足题目中给出的式子

那么我们不妨先移项,得到如下的式子

[pgeq a[j] - a[i] + sqrt{|i - j|} ]

而此时我们又要找到满足条件的最小的(p)

所以此时的(p)只要等于后面这个式子的最大值即可,即

[p = max(a[j] - a[i] + sqrt{|i - j|}), 1leq j leq n ]

先考虑一种比较好的情况,假设(j<i),那么绝对值就可以去掉了,即

[p = max(a[j] + sqrt{i - j}) - a[i] ]

上式中(max)里的式子取到最大值,相当于负的这个式子取到最小值

所以我们可以定义(dp[i] = min(-a[j] - sqrt{i - j}))

为什么要用(min)呢,因为在上面的证明中我们使用的都是(min),所以这里是用(min),如果是(max)的话可以换成负数取个(min)就好了,这是一样的,反正(dp[i])是自己定义的,定义成正负都一样

但是这样直接做是(n^2)的,这不能达到我们的要求,所以现在我们来进行优化

观察一下这个(DP)方程的二元函数,那么此时的(w(j,i))就等于(-a[j] - sqrt{i - j})

为了进行优化,下一步我们证明一下这个(DP)能不能满足决策单调性

求证:(w(j, i+ 1) + w(j + 1, i) geq w(j, i) + w(j + 1, i + 1))

证明:

把式子展开得

[-a[j] - sqrt{i + 1 - j} - a[j + 1] - sqrt{i - j - 1} geq -a[j] - sqrt{i - j} - a[j + 1] - sqrt{i - j} ]

发现可以去掉带有(a)数组的部分,然后式子就变成了这样

[-sqrt{i + 1 - j} - sqrt{i - j - 1} geq -sqrt{i - j} - sqrt{i - j} ]

移一下项得

[sqrt{i - j} - sqrt{i - j - 1} geq sqrt{i + 1 - j} - sqrt{i - j} ]

(x = i - j),因为(i > j) ,所以(x>0),于是一开始那个繁琐的问题就变成了证明(sqrt{x} - sqrt{x - 1} geq sqrt{x + 1} - sqrt{x})

定义函数(f(x)=sqrt{x} - sqrt{x - 1}),问题又转化成了证明(f(x) geq f(x + 1)),那么就是要证明(f(x))是单调非递增的函数即可

懒得证单调性……自己搜吧(qwq)

因为是个单调递减函数,所以证明成功

(j>i)时可以把序列翻转,得到的结果是一样的,做题的时候将序列翻转反向再做一遍上述操作即可,就不证明了

代码鸽了

总结

因为我很辣鸡,所以只能写这么一点点了(qwq)

下面几个参考都可以去看一下,我大部分的思路全来自这里

另外给大家推荐几道题8

[NOI2009]诗人小G

决策单调性优化模板题,但是会卡精度

[NOI1995]石子合并

可以用四边形不等式优化来做,也有一些很(np)的做法

ACwing305. 一个古老的石头游戏

上面那道题的加强版

参考

OI-wiki

0225【四边形不等式优化DP】

【学习笔记】动态规划—各种 DP 优化

原文地址:https://www.cnblogs.com/loceaner/p/12693256.html