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];


  • 相关阅读:
    mongo 索引
    nginx gzip配置
    vim 命令
    Mongo小结
    阿里云ECS服务器连接MongoDB
    python 解析Excel
    Django之数据库--ORM
    sql语句
    关于Django的序列化问题。serializers
    MongoEngine模块
  • 原文地址:https://www.cnblogs.com/hsuppr/p/3166248.html
Copyright © 2011-2022 走看看