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)

  • 相关阅读:
    dba_segments和dba_tables的不同
    查询用户表空间
    远程登录Oracle数据库
    SQL Server 收缩数据库
    Xshell乱码解决方法设置
    Spring常用注解
    Hibernate的fetch
    在 Eclipse 中使用 JSHint 检查 JavaScript 代码
    enterprise architect (EA) 源码生成UML类图,帮助理解项目工程
    上传excel数据到数据库中
  • 原文地址:https://www.cnblogs.com/mzl0707/p/6406517.html
Copyright © 2011-2022 走看看