zoukankan      html  css  js  c++  java
  • 斜率DP复习总结

    斜率DP
    如bzoj4518征途
    f[i]=f[j]+(sum[i]-sum[j])^2;
    决策j<k,要求最小值,因此当决策k优于决策j时
    f[k]-2*s[i]*s[k]+s[k]^2 < f[j]-2*s[i]*s[j]+s[j]^2

    (f[k]+s[k]^2)-(f[j]+s[j]^2) < 2*s[i] * (s[k]-s[j]) ①
    满足此式表明后面的点优于前面的点

    出队:队头后移直到①式不满足,说明这个点是最优点
    入队:k越小越优,令x<y<z
    如果k(x,y)>k(x,z)那么y出队,(也可表达为k(x,y)>k(y,z))
    意思是x与z会比x与y更优,斜率更小,因此y没有必要入队
    因为斜率越小越优,所以队列里的斜率是递增的,因此整个图像是开口向上的二次函数。

    对于斜率优化dp:

    1、当方程涉及求和与平方时考虑可以优化,最后的形式是比较两点的决策优先度可转化为看斜率,比如此题求最小值,所以一斜率小于2*s[i]表明k比j越优

    2、做此类题,首先简化题目要求,比如本体答案可以转化;然后列出方程和比较不等式,即令j<k,然后w[k]<w[j](假如求最小值的话),得到斜率的不等式;

    3、判断出队情况,比如当队列前后的k都小于2*s[i],表明后面的点始终比前面优

    4、判断入队情况,比如k(x,z)<k(x,y)则z点比y点优

    此类题的标志:

    一般是将长度为n东西分成k段,每段的权值是以乘积或平方的形式出现

    如果没要求分段,那么O(n)就可以做

    否则O(n*k)

  • 相关阅读:
    第八章 路由器交换机及其操作系统的介绍
    k-Tree DP计数
    Drop Voicing 最长升序
    高精度
    1196D2
    C
    POJ 3974 马拉车
    2020.8.1第二十六天
    2020.7.31第二十五天
    每日日报
  • 原文地址:https://www.cnblogs.com/mzl0707/p/6406517.html
Copyright © 2011-2022 走看看