• 斜率优化复习小结


    这篇基本上还是自己看的,写一些碎片和注意事项

     

    斜率优化:

    ①形如 DP[i]=min/max{DP[j]+A[j]+B[j]*C[i]+D[i]+E}方程,将转移方程化为 (DP[j]+A[j])=(-C[i])*(B[j])+(DP[i]-D[i]-E)

      即方程斜率式:y=kx+b,其中k=-C[i]

      要求C[i]单调!(斜率单调)

      易证明用单调队列维护一个上凸或下凸(最直观的证明方法大概是线性规划,用代数方法亦可),即可在线性时间求解

    ②形如 DP[i]=min/max{(B[i]-A[j])/(i-j)},ans=min/max(与前面一致){DP[i]} 

       易证用单调队列维护一个凸结构即可  

      

    注意事项:

    ①比较斜率的时候是否加等号(不影响DP值,但影响转移点选取)

    ②先入队还是先更新DP值

    ③long longintdouble

    ④状态转移方程不要写错(虽然是废话)

     

    练习题:

    HDU 3507

    UVALive 4726

    CodeForces 674C

    HDU 5956(树形DP,事实上暴力斜率优化可以被卡到n2,但oj上能过,如果加一个二分可以优化成nlogn,但据说在oj的数据上跑得会更慢——不过随机数据使用二分应该的确更慢一些)

  • 相关阅读:
    python学习第十五天
    python学习第十三、十四天
    python学习第十二天
    python学习第j十一天
    python学习第十天
    ViewController push的自定义动画
    iOS 判断设备是否越狱
    iOS
    OBJC字面量
    ios8 share Extension 分享扩展
  • 原文地址:https://www.cnblogs.com/terra/p/7048579.html
Copyright © 2020-2023  润新知