1.递归到动规的一般转化方法

递归函数有n个参数,就定义一个n为值的逆过程的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递归函数
类比数字三角形,从底部的一列开始,从下往上推,逐步填充数组。
由已知推未知,从递归到递推

2.动规解题的一般思路

2.1.将原问题分解为子问题

把原问题分解为若干个子问题,子问题和原问题形式相同或者类似,只不过规模变小了。子问题都解决,原问题即解决
(数字三角形为例,原问题是数字i,j到底边的最大和,子问题是它的正下方的数字到底边三角形的最大和或者右下方的到底边的数字最大和,这两个子问题如果都解决了,再加上自己就是原问题的解)
子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。

2.2.确定状态

在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个状态,一个状态对应于一个或多个子问题,所谓某个状态下的值,就是这个状态下所对应的子问题的解。
(以数字三角形为例,子问题是求某一行某一列的数字到底边的最大和,与子问题相关的变量i,j就代表着状态,它对应的值就是这行这列到底边的最大和,有多少个数字,就有多少个状态。)
**所有状态的集合,构成问题的状态空间的大小,与动态规划解决问题的时间复杂度直接相关。**在数字三角形的例子里,一共有NX(N+1)/2个数字,所以这个问题的状态空间里一共就有NX(N+1)/2个状态
整个问题的时间复杂度是状态数目乘以计算每个状态所需时间。
在数字三角形里每个状态只需要经过一次,且在每个状态上作计算所花的时间都是和N无关的常数。
用动态规划解题,经常碰到的情况是,K个整型变量能构成一个状态(如数字三角形中的行号和列号这两个变量构成状态)。如果这K个整型变量的取值范围分别是N1,N2….NK,那么,我们就可以用一个K维的数组array[N1][N2]…[Nk]来存储个状态的值。这个值未必就是一个整数或者浮点数,可能是需要一个结构才能表示的,那么array就可以是一个结构数组。一个状态下的值通常会是一个或多个子问题的解。

2.3.确定一些初始状态(边界状态)的值

以数字三角形为例,初始状态就是底边数字,值就是底边数字值

2.4.确定状态转移方程

定义出什么是状态,以及在该状态下的值后,就要找出不同的状态之间如何转移—即如何从一个或多个值已知的状态,求出另一个状态的值(人人为我递推型)。状态的迁移可以用递推公式表示,此递推公式也可被称作状态转移方程。
数字三角形的状态转移方程:
maxSum[r][j]的值为
D[r][j] r=N
max(maxSum[r+1][j],maxSum[r+1][j+1])+d[r][j]; 其他情况

3.能用动规解决的问题特点

1)问题具有最优子结构性质,如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质
2)无后效性。当前的若干状态值一旦确定,则此后过程的演变就只和这若干个状态的值有关,和之前采取哪种手段或者经过哪条路径演变到当前的若干个这样的状态,没有关系。

动态规划解题一般思路相关推荐

  1. 一文学会动态规划解题技巧

    前言 动态规划(dynamic programming,简称 dp)是工程中非常重要的解决问题的思想,从我们在工程中地图软件上应用的最短路径问题,再在生活中的在淘宝上如何凑单以便利用满减券来最大程度地 ...

  2. 动态规划解题套路框架

    动态规划解题套路框架 另外!!!# define maxn 100005最好多5个 509.斐波那契数 322.零钱兑换 斐波那契数 #include <iostream> #includ ...

  3. 动态规划解题思路与总结(三万字)

    动态规划 前言 手把手如何写动态规划 最长路径 网格 最长上升子序列问题 求最长上升子序列 最长非严格递增子序列 至少修改多少次能将序列变为上升序列 最长公共上升子序列 分级问题 移动服务 传纸条 排 ...

  4. 动态规划解题思路总结归纳(一)

    一.动态规划的三大步骤 定义:动态规划,无非就是利用历史记录,来避免我们的重复计算.而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存 步骤一:定义数组元素含义,例如定义一个 ...

  5. 第一次接触动态规划解题

    废话 一道力扣easy没做出来-我是fw, orz.看了题解觉得学到了很多,记录下来和大家分享一下. 题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就 ...

  6. leetcode解题常见思路

    (梳理框架主要由up主提供) 前言 解题思路是解题过程中最关键的一步,即使最终没做出来,能大概知道解题思路甚至有多个解题思路也是挽救方法 以下提及题目不止对应技巧一种思路,但建议先按对应思路去解题,再 ...

  7. 审题解题没思路?算法大赛出题方为你指点迷津!

    2020腾讯广告算法大赛初赛正在火热进行中,万名技术人才正在进行硬核算法比拼,史上最有诚意的大赛组委会又双叒来放送夺冠秘籍了! 5月21日晚19:00,第三场线上直播重磅来袭,组委会特邀腾讯数据平台部 ...

  8. CTF解题基本思路步骤(misc和web)

    平时注意收集做题用到的工具和脚本 知识点总结 步骤使用序号列表,并列使用项目列表 找不到思路,或者是出现异常,就回去仔细读题 文章目录 CTF-web基础解题步骤 CTF-misc解题思路 图片: 主 ...

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

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

最新文章

  1. 深度学习渐趋冷静,为何图形计算却逆势反涨?
  2. 主板支持最大内存查看软件
  3. POJ-1840 Eqs Hash
  4. 计算机二级考试字处理表格和文字分栏,Exce表格分栏打印输出的两种巧妙方法...
  5. Web前端开发薪资待遇及发展前景解读
  6. 谷歌大中华区总裁李开复今日离职
  7. 利用obfuscar对.NET应用进行混淆
  8. 【标签组件与图标 3.3】
  9. 58-混沌感悟.(2015.2.11)
  10. JBPM4.4总结-嵌入自己的用户体系(集成自定义用户表)
  11. mysql 交叉表行转列_Oracle行转列、列转行的Sql语句总结
  12. mysql分组和where条件查询,mysql中where和having条件查询的区别
  13. TransE,知识图谱嵌入(KGE)论文精读
  14. Jsoup爬虫小案例
  15. Arduino IDE 烧录 ESP8266教程
  16. 基于MATLAB的车牌识别系统
  17. jsGannt Improved在vue中的使用
  18. Nvidia Agx Xavier平台无PD控制器USB接口调试
  19. SASE , sdp等
  20. Latex调整行间距

热门文章

  1. 继腾讯后 B站又获阿里投资!加速二次元电商商业化
  2. 该!4G假装5G的美国运营商被起诉了
  3. java的outputstream_Java OutputStream类
  4. linux pxe安装视频,Linux—图解PXE实现全自动安装系统(1)
  5. 项目背景怎么描述_培训回顾 |第六届“互联网+”之创业大赛项目计划书撰写
  6. 怎么看vray渲染进度_3dmax如何渲染光子,为什么会卡光子呢?
  7. ole object interface 能获取图片吗_常见的闲鱼辅助软件有哪些,你知道吗
  8. 【clickhouse】clickhouse There is no DistributedDDL configuration in server config
  9. 【Elasticsearch】Elasticsearch:Searchable snapshot - 可搜索的快照
  10. 【Elasticsearch】如何在 Elasticsearch 中轻松编写脚本