zoukankan      html  css  js  c++  java
  • 斜率优化复习小结

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

     

    斜率优化:

    ①形如 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的数据上跑得会更慢——不过随机数据使用二分应该的确更慢一些)

  • 相关阅读:
    /pentest/enumeration/0trace/0trace.sh
    2.2synchronized同步语句块
    2.1synchronized同步方法
    第二章:对象及变量的并发序言
    第一章总结
    1.11守护线程
    1.10线程的优先级
    1.9yield方法
    1.8暂停线程
    微信自动回复
  • 原文地址:https://www.cnblogs.com/terra/p/7048579.html
Copyright © 2011-2022 走看看