zoukankan      html  css  js  c++  java
  • 关于对动态规划的思考 【转】

    原文地址:https://blog.csdn.net/TSOI_Vergil/article/details/52934258  来自最强的Vergil学长。至理箴言:

     动态规划是一个考验技巧性的算法,对于动态规划算法,浅谈几点经验。

        首先是设计状态,我们肯定是要有一个一维或多维的状态的,那么如何设计它们的意义呢,首先我们可以分析出题目中的一些重要的量,比如当前时间,选了几个,考虑到了哪里,对于这些状态我们是要以一个值来表示这些状态的最优情况,比如f[i][j][k]..=P,i,j,k表示状态,P表示那个值,我们i,j,k,P都是这些重要的量,我们应该先把这些重要的量列出,然后感觉一下如何设计状态容易转移,一般来说设计了一个好的状态剩下的事情都比较好办。

        如果这个状态不是太好,我们可以考虑优化转移,我们可以再开一个别的数组维护我们转移的信息,比如说维护最小值,或者用高级数据结构维护,或者发现状态的一些性质,这样就能更快的转移。

        其实动态规划也是考虑了所有的状态,如果说你设计的DP没有将所有的状态考虑到,那么一定是错误的,动态规划的实质就是枚举了所有的状态,然后保留最大值。

        个人认为动态规划就是一个分类,动态规划的状态就是分类的标准,动态规划在每一中类别中都取得最优解,另外对于每个基本元素来说,一般都有几个状态,比如说背包问题中每个物品的选与不选,或者是这个元素放在哪个位置等等等等,考虑到每个元素的状态也有助于我们设计整体的状态。

    优化: 连续一段和 前缀和
        连续带修改 线段树
        连续求最大值 线段树/ST表

  • 相关阅读:
    C语言中 指针和数组
    C语言中 指针与结构体
    void指针、NULL指针和未初始化指针
    C语言中 指针、引用和取值

    别--------
    快速开发 jQuery 插件的 10 大技巧(转)
    采用预取(Prefetch)来加速你的网站(转)
    HttpWatch工具简介及使用技巧(转)
    iScroll框架的使用和修改
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9550201.html
Copyright © 2011-2022 走看看