• DP优化总结


    单调队列优化DP

    一般方程

    [dp(i)=min_{L(i)leq j leq R(i)} {dp(j)+val(i,j)} ]

    (val(i,j))是一个每一项只与(i)(j)中的一个值有关的多项式,这是使用单调队列优化的基本条件,我们可以在外层循环为定值的时候,将方程中与(i)和与(j)有关的拆开,与(i)有关的为定值,随着(i)的变化,(j)的上下界发生变化,维护(val(i,j))的单调性,及时排除无用的决策,使得DP得以优化
    [SCOI2010]股票交易

    斜率优化DP

    一般方程在单调队列的基础上,(val(i,j))中的多项式与(i,j)都有关,有二次项
    (dp(i)=max{dp(j)+a(su(i)-su(j))^2+b(su(i)-su(j))+c})
    (dp(i)=min{dp(j)+(su(i)+i-su(j)-j-L-1)^2})
    先看第一个式子

    [dp(i)=dp(j)+asu^2(i)+asu^2(j)-2asu(i)su(j)+bsu(i)-bsu(j)+c ]

    [dp(j)-asu^2(j)+bsu(j)=-2asu(i)su(j)+asu^2(i)+bsu(i)-dp(i)+c ]

    (-2asu(i))看作斜率,(su(j))为自变量,(dp(j)-asu^2(j)+bsu(j))为因变量,那么每一个决策可以看作是(-2asu(i)x+asu^2(i)+bsu(i)-dp(i)+c)这条直线上的一个点,由于斜率是固定的,且此例中点形成了一个上凸壳,用单调队列维护,最优决策是两个决策点之间斜率(slope)第一次小于(-2asu(i))时的前一个决策点。
    另一例是同样的道理,最后需要维护的是一个下凸壳。
    [APIO2010]特别行动队
    [HNOI2008]玩具装箱
    [ZJOI2007]仓库建设
    [APIO2014]序列分割

    四边形不等式优化DP

    (w(i,j))是定义在整数集合上的二元函数,对于定义域上的任意整数(a,b,c,d(aleq bleq cleq d))都有(w(a,d)+w(b,c)geq w(a,c)+w(b,d))(w(i,j))满足四边形不等式
    四边形不等式的另一个形式((a< b))

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

    一般方程

    [dp(i)=min_{0 leq j < i}{dp(j)+w(j,i)} ]

    定理:若函数(w(j,i))满足四边形不等式,则dp有决策单调性。
    由此,我们可以将dp计算优化到(O(nlogn))
    实现
    我们维护一个队列,维护整个决策数列,队列里的元素是一个三元组((j,l,r)),表示(i in [l,r])时决策点为(j),那么每次新算出来一个(dp(i))考虑其可以成为那些(dp(i'))的决策点,由于决策单调性,在队列里二分到一个位置,在此位置之后所有决策都没有当前的(i)优,并将(i)加入决策队列。
    同时我们发现算完了(i)之后决策队列中([1,i-1])的决策就没用了,及时排除队首无用的决策,所以我们其实维护了以个单调队列。
    [NOI2009]诗人小G
    [POI2011]Lightning Conductor

    二维四边形不等式优化区间DP

    一般方程

    [dp(i,j)=min_{i leq k < j}{dp(i,k)+dp(k+1,j)+w(i,j)} ]

    定理1
    如果此方程满足
    1.(dp(i,i)=w(i,i)=0)
    2.(w(i,j))满足四边形不等式
    3.对于任意的(ale b le c le d)(w(a,d) ge w(b,c))
    那么(dp(i,j))也满足四边形不等式
    定理2
    (p(i,j))(dp(i,j))取到最小值的(k)值,如果(dp(i,j))具有四边形不等式,那么对于任意的(i<j),有(p(i,j-1)le p(i,j) le p(i+1,j))
    实现
    由此,我们可以将(k)的枚举框定在([p(i,r-1),p(l+1,r)])中就可以了,可以证明复杂度为(O(n^2))
    [NOI1995]石子合并
    [IOI2000]邮局

  • 相关阅读:
    浮点型float
    Linux时间同步命令
    四层负载均衡和七层负载均衡的区别
    Linux下把Mysql和Apache加入到系统服务里
    Linux下Nagios的安装与配置
    Linux是怎么启动的(整理)
    centos 双网卡 eth0 eth1 配置
    MYSQL的常用命令和增删改查语句和数据类型
    CentOS 下如何修改 MySQL 的密码
    mysql unrecognized service问题解决
  • 原文地址:https://www.cnblogs.com/hangzz/p/13869438.html
Copyright © 2020-2023  润新知