动态规划题目分析和解法

在正式介绍动态规划之前,应当先回顾了分治,回溯和递归。在课上讲到,“动态规划”和前面三者其实没有本质区别,都是把问题进行拆分,寻找规律。比如分治其实是递归的特殊形式,很多题目子问题都是有自相似性的,关键在于怎么把大问题分解成小的子问题。

 

养成数学归纳法思想,也就是先把基础条件想明白然后解决,比如n=1怎么样,n=2的时候又怎么样,然后推导到n和n+1的情况。数学归纳法的思想好比是爆竹,想要整串都能爆炸,我们需要推导所有的最后都能爆炸。

 

动态规划具体是什么意思?有一个例子其实很生动。比如我们在纸上写了很多个”1+1+1+1+1…”,第一眼看过去,谁都不能知道到底写了多少个1.但是如果我们已经计算好了比如之前一共写了8个1,那么只要再写一个1,我们马上就知道现在一共写了9个1,这就是动态规划。动态规划是一个能够让我们“记忆”之前的成果并且把它们运用在后面的运算中的一个方法,能够让程序“记住”之前所得到的答案。动态规划可以说是用空间换时间的一种方式。

 

对于一个动态规划问题,我们往往需要从两个方面进行考虑,即:找出问题之间的联系以及记录答案。这里的难点实际是找出问题之间的联系,因为记录答案可以用比较简单的数据结构顺带完成。

 

解决动态规划问题一般需要四个步骤:

  • 问题拆解,找到问题之间的具体联系
  • 状态定义
  • 递推方程推导
  • 代码实现

 

上述步骤中前两步是最关键的。如果前两步骤顺利完成,后面递推方程的推导是非常简单的。尤其对于面试题,只要找到了合适的状态定义,递推方程往往不会很难,竞赛的话递推方程就可能比较难了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值