zoukankan      html  css  js  c++  java
  • 决策单调性复习

    决策单调性复习

    二分栈

    直接画图吧

    有时候dp的决策会满足单调性,如下:(曲线代表前面的某个决策点对于x坐标上的数的贡献构成的图像)

    其中1234起点依次递增。现在来看1和2两条曲线,在交点前2更优,交点后1更优。因为1的起点在2之前,并且有决策单调性(斜率单增,1比2增长的越来越快),所以总有一个点使得在这之后1比2更优。而如果是下面这种:

    2就永远不可能比1更优。

    于是就自然的有一种想法:二分出什么时候后面比前面更优,并且搞一个单调栈来保存。

    关于具体方法:先看第一张图中的1,2和4,假设现在栈中是1,2,现在处理4,可以发现4和2的交点在1和2的交点之后

    那么在1和2的交点后1更优,4和2的交点前4更优,2就没用了。

    有用的情况可以看1,2和3,则在2和3的交点后,1和2的交点前2是有用的。

    那么我们求出当前曲线和栈里最后的曲线的交点,和栈里最后两条曲线的交点比较就行了。注意随着x的增加要弹栈。还有一个注意事项是二分的下界,出现第二种情况的时候交点应该是0。

    而对于斜率单调降的函数也差不多,开个单调队列就行。

  • 相关阅读:
    RHEL 6.5 安装Docker
    sar命令
    Linux 安装部署 Redis
    hugepage设置
    pycharm使用
    oracle如何保证数据一致性和避免脏读
    转:数据库实例自动crash并报ORA-27157、ORA-27300等错误
    oracle安装内核参数设置
    外部表
    LNMP环境搭建
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/14084880.html
Copyright © 2011-2022 走看看