zoukankan      html  css  js  c++  java
  • 【转】单调队列优化DP

      转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html

    单调队列是一种严格单调的队列,可以单调递增,也可以单调递减。队首位置保存的是最优解,第二个位置保存的是次优解,ect。。。

    单调队列可以有两个操作:

    1、插入一个新的元素,该元素从队尾开始向队首进行搜索,找到合适的位置插入之,如果该位置原本有元素,则替换它。

    2、在过程中从队首删除不符合当前要求的元素。

    单调队列实现起来可简单,可复杂。简单的一个数组,一个head,一个tail指针就搞定。复杂的用双向链表实现。

    用处:

    1、保存最优解,次优解,ect。

    2、利用单调队列对dp方程进行优化,可将O(n)复杂度降至O(1)。也就是说,将原本会超时的N维dp降优化至N-1维,以求通过。这也是我想记录的重点

    是不是任何DP都可以利用单调队列进行优化呢?答案是否定的。

    记住!只有形如 dp[i]=max/min (f[k]) + g[i]  (k<i && g[i]是与k无关的变量)才能用到单调队列进行优化。

    优化的对象就是f[k]。

  • 相关阅读:
    虚函数******
    C++ 中的运算符重载********
    继承
    静态成员和成员函数
    类指针
    内联函数
    k8基础架构
    cobbler自动装机
    ens33-eth0
    PXE-自动装机配置
  • 原文地址:https://www.cnblogs.com/sweat123/p/5663603.html
Copyright © 2011-2022 走看看