zoukankan      html  css  js  c++  java
  • 决策单调性优化DP

    决策单调性

    决策单调性,顾名思义就是决策点具有一定的单调性,使得我们在转移的过程中不需要遍历全部的情况,而只需要在一段满足单调性的区间内寻找我们想要的最优解

    有的题目甚至不算是DP题,但是也有决策单调性的性质,也归到这一类

    由于博主太菜,这里面很多结论不会给出详细的证明,可能只会给出感性理解的记忆方式

    建议的阅读顺序是:

    • 记住区间包含单调性,四边形不等式的定义
    • 学习决策单调性优化DP在区间类(2D1D)和1D1D DP 中的应用
    • 在看例题的同时留意四边形不等式的一些证明

    四边形不等式

    定义

    • 区间包含单调性

    [forall lle l'le r'le r, w(l',r')le w(l,r) ]

    常见的满足区间包含单调性的有:(w(l,r)=r-l​),前缀和等

    • 四边形不等式(交叉小于包含):

    [forall l_1le l_2le r_1le r_2, w(l_1,r_1)+w(l_2,r_2)le w(l_1,r_2)+w(l_2,r_1) ]

    特别的,如果等号恒成立,称(w)满足四边形恒等式

    常见的满足四边形不等式的有:(w(l,r)=(r-l)^2),证明如下:设(ale ble cle d)

    [egin{aligned} & (c-a)^2+(d-b)^2=a^2+b^2+c^2+d^2-2ac-2bd\ &le a^2+b^2+c^2+d^2-2ac-2bd-2a(d-c)+2b(d-c)\ &=a^2+b^2+c^2+d^2-2ad-2bc\ &=(d-a)^2+(c-b)^2 end{aligned} ]

    常见的满足四边形恒等式的有:(w(l,r)=r-l)

    如果已知(w(l,r-1)+w(l+1,r)le w(l,r)+w(l+1,r-1)),那么可以归纳证明其满足四边形不等式

    一些性质

    这些性质常用来证明区间包含单调性和四边形不等式,打表观察DP状态或者(w)函数是否满足这个关系也是实用手段(尤其是当你不知道该怎么优化DP的时候可以猜一手)

    性质1

    • 若函数(w_1(l,r),w_2(l,r))均满足四边形不等式/区间包含单调性,则对于任意 (c_1,c_2ge 0),函数 (c_1w_1+c_2w_2) 也满足四边形不等式/区间包含单调性。

    性质2

    • 若函数(w(l,r)=f(r)-g(l)),则函数 (w) 满足四边形恒等式。当函数 (f,g) 单调增加时,函数(w) 还满足区间包含单调性。

    性质3

    • (h(x)) 是一个单调增加的凸函数,若函数(w(l,r))满足四边形不等式和区间包含单调性,则复合函数 (h(w(l,r))​) 也满足四边形不等式和区间包含单调性。

    性质4

    • (h(x)) 是一个凸函数,若函数(w(l,r))满足四边形不等式和区间包含单调性,则复合函数 (h(w(l,r))) 也满足四边形不等式。

    以上性质会在例题的证明中被提到

    决策单调性优化DP

    决策单调性能够优化的DP主要有以下两类:

    区间类(2D1D)动态规划

    (2D1D指状数(O(n^2)),转移有(O(n))中情况)

    形如:

    [f [l,r]gets minlimits_{lle k<r}{f [l,k]+f [k+1,r]}+w(l,r) ]

    引理:若(w(l,r))满足区间包含单调性和四边形不等式,则状态(f[l,r]​)满足四边形不等式

    定理:记(g[l,r])(f[l,r])的最小的 最优决策点,那么

    [g[l,r-1]le g[l,r]le g[l+1,r] ]

    也就是说,我们在区间类DP的时候顺便记录下转移点,对于当前状态(f[l,r]),我们可以确定它的可能的最优解一定在([ g[l,r-1], g[l+1,r] ])这个区间内,对决策点的总枚举两降到(O(n^2))

    for (int len = 2; len <= n; ++len)  // 枚举区间长度
      for (int l = 1, r = len; r <= n; ++l, ++r) {
        // 枚举长度为len的所有区间
        f[l][r] = INF;
        for (int k = g[l][r - 1]; k <= g[l + 1][r]; ++k)
          if (f[l][r] > f[l][k] + f[k + 1][r] + w(l, r)) {
            f[l][r] = f[l][k] + f[k + 1][r] + w(l, r);  // 更新状态值
            g[l][r] = k;  // 更新(最小)最优决策点
          }
      }
    

    例题

    • HDU3480 Division,四边形不等式的证明见上
    • P4767 [IOI2000]邮局(w(l,r))([l,r])之间建一个邮局的最小距离,显然取中位数最优,可以证明其满足四边形不等式(我不会证)

    1D1D 动态规划

    形如:

    [f[i]gets minlimits_{j=1}^{i-1}{f[j]+w(j,i)} ]

    定理:若(w(l,r))满足四边形不等式,记(g[i])表示(i)的最小最优决策点,那么

    [forall r_1le r_2,g[r_1]le g[r_2] ]

    另一种形式(严格弱化版)

    形如:

    [f[i]=minlimits_{j=1}^{i-1}{w(j,i)} ]

    因为决策单调性只限制了下界,并没有限制上界,所以复杂度依然是(O(n^2))的。

    所以我们要想办法限制上界

    考虑暴力(O(n))找出中点(mid)的最优转移点,那么对于([l,mid-1])的点,我们有了一个上界,对于([mid+1,r])的点,我们有了新的下界

    这是一个分治问题,递归下去处理即可

    例题

    以Lightning Conductor为例使用四边形不等式相关性质证明四边形不等式

    对于所有的(p_i),求(maxlimits_{j=1}^n{a_j+sqrt{|i-j|}}-a_i)

    首先将绝对值去掉,变成(max(maxlimits_{j=1}^i{a_j+sqrt{i-j}},maxlimits_{j=i+1}^n{a_j+sqrt{j-i}})-a_i),两部分处理方式完全一致,直接reverse之后再做一遍即可

    把所有数取反,把(max)变成(min)(minlimits_{j=1}^i{-a_j-sqrt{i-j}})

    由性质4:(w(l,r)=r-l),满足四边形恒等式和区间包含单调性,(-sqrt{x})是凸函数,所以复合函数(w_2(j,i)=-sqrt{i-j})满足四边形不等式

    由性质1:(w_1(j,i)=-a_j),满足四边形恒等式,则原函数(=w_1(j,i)+w_2(j,i)),满足四边形不等式,得证

    剩下的就分治即可,时间复杂度(O(nlog n))

    回到原问题

    由于决策的单调性,我们可以将(1sim n)划分成若干区间,表示这个区间内的DP值转移自哪里。

    我们可以用单调队列维护。单调队列里的元素记录三个信息:(l,r,p),表示当前状态下(考虑了前(i)个元素),(p)是区间([l,r])内的最优决策点。如果队首的(r<)当前的(i),弹出无用的队首。插入队尾时,依次和队尾元素比较,如果(f_i o f_l)(f_p o f_l)更优,那么(p)在任何状态下都不会比(i)更优,弹出队尾;否则将一段后缀分成两个部分,分界线用二分的方式找到。

    时间复杂度(O(nlog n))

    例题

    另一种形式

    [f [i,j]gets minlimits_{kle j}{f [i-1,k]+w(k+1,j)} ]

    实际上是分层的 1D1D DP。我们有类似的结论

    引理:若(w(l,r))满足区间包含单调性和四边形不等式,则状态(f[l,r]​)满足四边形不等式

    定理:记(g[l,r])(f[l,r])的最小的 最优决策点,那么

    [g[l,r-1]le g[l,r]le g[l,r+1] ]

    感性理解:因为有区间包含单调性,我们把一个区间的贡献拆成多个肯定不会更劣,这样我们得到了下界,同时减少一个元素贡献也不会变劣,得到上界

  • 相关阅读:
    greenplum日常维护手册
    Android UI界面基本属性 大全
    Listview 选项按下去黑了所有按钮的解决方法 ——android:cacheColorHint=“#00000000”
    【转】Android应用程序模块详解
    android退出有多个activity的应用
    启动模式"singleTask"和FLAG_ACTIVITY_NEW_TASK具有不同的行为!
    Android 按两次back键退出 效率最高版
    【转】跑马灯效果
    Sundy笔记__Git版本控制
    如果你想用对话框代替一个activity的话,可以设置activity的主题属性
  • 原文地址:https://www.cnblogs.com/harryzhr/p/14695633.html
Copyright © 2011-2022 走看看