zoukankan      html  css  js  c++  java
  • 四边形不等式优化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 优化

  • 相关阅读:
    poj3264
    codevs4373 窗口==poj2823 Sliding Window
    BZOJ 3831
    1107 等价表达式
    codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
    BZOJ 1050
    1294 全排列[多种]
    BZOJ 2456
    BZOJ 3725
    BZOJ 3043
  • 原文地址:https://www.cnblogs.com/loceaner/p/12693256.html
Copyright © 2011-2022 走看看