zoukankan      html  css  js  c++  java
  • 关于动态规划的优化

    在一维中常见三种优化:

      1.优化 固定位置~a[i], a是一个递增序列,用一个变量维护即可。

      2.优化 c[i]~d[i], c和d都是递增序列,用单调队列可以优化。

      3.优化 没有规律的一段,可能用线段树,树状数组优化。

    在二维中也可能在某一维利用到上面三种优化。

    斜率优化:

      上面三种优化时,我们可以发现它们的转移方程没有与目标状态有非加减关系的。

      对于两个状态可以用类似(y[j] - y[k])/(x[j] - x[k]) <= i 的式子比较出最优决策。

      我们可以发现可以转化成一个平面上两点的斜率。

      对于不同的题目可以分别检测上凸与下凸,从而得出维护上凸或下凸(就是一个凸要弹,一个凸不弹)。

    dp的复杂度和状态数,转移负责度有关,因此优化动态规划要从这两个方面入手。


    有一串字母(a-z)一次可以消去一串相同且相邻的串。求最少消去次数。

    状态不太好想,f[i][j][0]代表i~j段目前还未选好要消去哪个字母。f[i][j][1-26]代表正在消去a-z已付代价。

    f[i][j][0] = MIN(f[i][j][k] + 1);

               1<=k<=26

    f[i][j][?] = MIN(f[i][t - 1][?] + f[t + 1][j][0])) 

        t是i~j中字母?的位置(可以通过记录i~j中最后一个字母?的位置为w[i][j][?],t初始w[i][j][?],然后t = w[i][t - 1][?])

    如果t不存在,f[i][j][?]=最后的f[i][j][0];


  • 相关阅读:
    在JS和.NET中使用JSON (以及使用Linq to JSON定制JSON数据)
    转载JSON格式化工具
    bzoj3771 Triple
    hdu 2082 找单词
    bzoj 3143: [Hnoi2013]游走
    Wannafly挑战赛17 B
    基尔霍夫矩阵
    矩阵&行列式
    luogu P2421 [NOI2002]荒岛野人
    bzoj 2818: Gcd
  • 原文地址:https://www.cnblogs.com/hsuppr/p/3166248.html
Copyright © 2011-2022 走看看