「笔记」四边形不等式优化DP
四边形不等式优化DP
定义
1.原始定义
假设有一个二元函数\(w(x,y)\),如果对于任意\(a \leq b \leq c \leq d\),有
就说函数\(w\)满足四边形不等式
2.等价定义
还有一个等价的定义:如果对于任意\(a\leq b\),有:
就说函数\(w\)满足四边形不等式、
证明 2 -> 1
对于任意\(a < c\), 有 \((1)\)式:
对于任意\(a+1, c\),有\((2)\)式:
两式相加得到\((3)\)式:
对比\((1)\)式和\((3)\)式,发现\(a + 1\)可以扩成\(a + 2\),同理\(a+2\)可以扩成\(a+3\),\(a+3\)可以扩成\(a+4\)……可以一直扩大直至\(b\leq c\)(\(b\)是在\(a\)和\(c\)之间的一个数),从而得到:
同理,对于任意\(a<c+1\),有\((4)\)式:
\((1)\)式与\((4)\)式相加得到\((5)\)式:
与\((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(c\leq d)\),从而得到:
再把上式\(a+1\)扩大到\(b\),保证\(a\leq b \leq c \leq d\),就可以得到\(1\),即
\(w(a,d) + w(b, c) \geq w(a, c) + w(b, d)\)
由此原始定义得证。
所以,证了这么久有啥用呢?
决策单调性
我们在做\(DP\)时经常会遇见这样的\(DP\)方程
这样的\(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)\),根据最优性:
假设\(i' > i\),此时\(j \leq p[i] \leq i \leq i'\),根据四边形不等式:
对这个式子进行移项,得到
将此式和\(DP\)式(根据最优性得出的式子)相加得:
由此可得,对于\(i'\)来说,\(p[i]\)比\(j\)优,得证。
小小结
在上面的证明中我们可以知道,等价定义可以推出原始定义,而原始定义又可以推出决策单调性定理,其实在日常做题中,如果满足了等价定义,我们就可以直接用决策单调性来解决问题(就是说\(2\)可以推出\(1\),\(1\)可以推出\(3\),那么\(2\)可以推出\(3\))
下面就来看一道例题吧
例题
链接:洛谷P3515 [POI2011]Lightning Conductor
题目很简洁,就是为了找这么一个数\(p\)满足题目中给出的式子
那么我们不妨先移项,得到如下的式子
而此时我们又要找到满足条件的最小的\(p\)
所以此时的\(p\)只要等于后面这个式子的最大值即可,即
先考虑一种比较好的情况,假设\(j<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\)数组的部分,然后式子就变成了这样
移一下项得
令\(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
决策单调性优化模板题,但是会卡精度
可以用四边形不等式优化来做,也有一些很\(np\)的做法
上面那道题的加强版