基本思想

动态规划是针对一类求最优解的问题的算法, 其核心是将一个问题分解成为若干个子问题(这里对应下文的子问题使用条件), 部分类似于分治的思想(不懂得可以参考归并排序), 通过求每一次的最优决策, 来得到一个最优解。在这里最重要的就是子问题的思想。

另一种理解方式数是DP的核心是加法原理(下文的人人为我形递归)和乘法原理(下文的我为人人形递归), 通过这两个原理, 在当状态的前有限多个状态中找到最优解来求得当前状态, 而对于前一个或者前几个状态采用同样的方法知道求出边界状态,这种方法最恶心的就是边界状态

在学会搜索之后, 最简单入门DP的方法就是记忆话搜索, 但是后来会发现大多数DP题目因为时间和内存的限制并不能使用递归(函数的递归调用会占用栈内存, 另外函数的递归调用也将占用大量的时间)

子问题解决法的适用条件

需同时满足一下三点:

1.具有相同的子问题:我们必须保证我们分割成的子问题也能按照相同的方法分割成更小的自问题, 并这些自问题的最终分割情况是可以解决的。

2.满足最优子结构:就是一个决策的子决策也是最优的

3.无后效性:这是DP中最重要的一点, 他要求每个子问题的决策不能对后面其他未解决的问题产影响, 如果产生就无法保证决策的最优性, 这就是无后效性。往往需要我们找到一个合适的状态。
··这条非常重要
··这条非常重要
··这条非常重要
举个例子:我们在LIS中先求前M项的LIS, 然后依次向后求, 直到str.len, 这就是因为我们在求前M项的过程中, 对(M + 1)→(str.len)并无影响。消除后效性的例子等等会单开一片博客来讲。

常用的解题步骤

前两天刚刚被大牛虐过DP, 姑妄言之:

第一步:确定子问题。 在这一步重点是分析那些变量是随着问题规模的变小而变小的, 那些变量与问题的规模无关。
第二步:确定状态:根据上面找到的子问题来给你分割的子问题限定状态
第三步:推到出状态转移方程:这里要注意你的状态转移方程是不是满足所有的条件, 注意不要遗漏。
第四步:确定边界条件:先根据题目的限制条件来确定题目中给出的边界条件是否能直接推导出, 如果不行也可以尝试从边界条件反推(举个例子:a(n)→a(2)有递推关系, 但是a(2)→a(1)不符合上述递推关系, 我们就可以考虑用a(1)来倒推出a(2), 然后将递推的终点设置为a(2));
第五步:确定实现方式:这个依照个人习惯 就像是01背包的两层for循环的顺序
第六步:确定优化方法:很多时候你会发现走到这里步的时候你需要返回第1步重来。首先考虑降维问题(优化内存), 优先队列、四边形不等式(优化时间)等等。

常用方法

以下是方法, 但是不要局限在这里, 方法是无限的

(1)模型匹配法:熟练记忆并且理解LIS、LCS、01背包、完全背包、区间模型、树状模型。基本就是将原模型加以变化后加以套用

(2)三要素法:
·······先确定阶段:如数塔问题, 先确定当前选的是第几层。
·······先确定状态:这是最常用的绝大多数的DP都是这么做的。
·······先确定决策:背包问题(选还是不选第i种物品)
这是个经验问题, 然而我还没有这种经验。

(3)寻找规律法:从小的状态开始推, 耐心找规律, 或者可以在本地暴力打表, 暴力出奇迹, 不打2、3页那都不叫打表,几年省赛彻底领悟了,不想说啥。

(4)边界条件法: 一般边界时容易导出状态关系的地方

(5)增加约束条件法:这条就对应着上文的消除后效性,以后的博客会有例题

动态规划(1):基本思路以及步骤相关推荐

  1. 学习笔记 - 动态规划做题思路

    目录 一 . 什么是动态规划? 二.什么问题能用动态规划? 三.动态规划思路 一 . 什么是动态规划? 上一篇文章已经讲了动态规划是什么,按我个人的理解来说 动态规划就是一种 将一个大问题分解为各个独 ...

  2. 急急急 大神帮忙给个思路和步骤吧 万分感谢

    对标题党新闻识别技术的相关知识进行研究和总结,包括网页去噪工作原理.向量空间模型和矩阵的奇异值分解的相关知识.了解基于潜在语义分析的标题党识别系统,学习其相关技术,包括向量空间模型的构建.基于SVD的 ...

  3. 物联网LoRa系列-3:LoRa终端搭建的总体思路、步骤与架构

    搭建的LoRa终端的总体思路与步骤: 1. 搭建的LoRa终端的系统需求和目标 2. 设计LoRa终端的目标系统 3. 设计LoRa终端的主机开发环境 4. 设计LoRa终端的软件架构 5. 构建Lo ...

  4. 整站SEO优化需要怎么做?SEO整站优化的思路及步骤

    整站SEO优化需要怎么做?整站SEO优化为使网站全体各各细节到达很优的作用,不扔掉任何有关于网站事务的长尾要害词,高掩盖方针客户集体,有层次的定位网站要害词. 和要害词排名不同的时,单纯地进犯几个要害 ...

  5. 动态规划算法解题思路

    在做动态规划类题目时最大的感觉就是能够分析出这道题目需要用动态规划算法来解,却没有办法构建出解题步骤,看到别人的分析时候又感觉代码很简单但是自己却想不出. 其实这还是没有理解到动态规划算法的基本思想. ...

  6. 动态规划解题一般思路

    1.递归到动规的一般转化方法 递归函数有n个参数,就定义一个n为值的逆过程的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递 ...

  7. 三子棋超详细思路及步骤

    前言: 三子棋C语言小游戏只要弄清楚整体的结构和思路,其实很简单,全篇代码主要由许多c语言基础循环和分支完成的工程,只要掌握分支和循环就能写出三子棋.先思考整体思路怎么完成游戏?代码如何布局?怎么达到 ...

  8. 动态规划+状态压缩思路解决旅行者问题

    问题描述 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销 ...

  9. Python爬虫实战,完整的思路和步骤(附源码)

    前言 小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站. 本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法. 环境介绍: python 3.6 pych ...

最新文章

  1. 超全超实用的Javascript类库和jQuery插件大全之一:图片,地图和图形
  2. java utf-8文件处理bom头
  3. mysql 图形化工具
  4. 网络namespace
  5. 20190421-那些年使用过的CSS预处理器(CSS Preprocessor)之Sass and Less
  6. java数组的调用_java中数组的应用及方法
  7. 少女为什么会身上香香的?
  8. github持续集成的设置_如何使用GitHub Actions和Puppeteer建立持续集成管道
  9. 今天我勇敢的点就一个gpio口
  10. 前端笔记 | CSS进阶
  11. java web项目个人博客_javaWeb项目个人博客系统
  12. linux系统支持速达软件吗,速达3000系列常见问题100问
  13. 硕士毕业论文框架怎么搭建?
  14. element-ui el-upload框去除‘按 delete 键可删除’提示
  15. 如何打印网上的文章资料,网上文章怎么打印
  16. 2022凉茶市场份额
  17. SpatialTE:从空间转录组数据集分析转座因子表达的工具
  18. matlab常用逻辑运算
  19. 使用cef3开发的浏览器不支持flash问题的解决
  20. 【论文排版】参考文献的格式设置

热门文章

  1. Node.js + Web Socket 打造即时聊天程序嗨聊(上)
  2. 用更简单的方式画森林图
  3. 反射机制-Reflected
  4. 批量修改文件夹下的文件后缀
  5. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试--补充篇1一些思考
  6. 番茄工作方法以及番茄工作表
  7. Mac 系统下查看隐藏文件夹的方法
  8. 国医大师王绵之:汤药煎服经验谈
  9. java 页面之间传值_JSP页面间传值方法
  10. LoRaWAN1.0.x规范详解之空口帧结构