刚开始听说动态规划的时候觉得很难、很复杂,所以不敢轻易的去触碰这块骨头,遇到很多问题需要求解的时候我都尽量不去用动态规划解决,因为我真的是看不懂,这里顺便说一下,我原本是电子专业的,对算法啊啥的一窍不通,但是最近找工作,发现笔试这一关是必须要有那么几个算法题,而分数最多的一个基本上是与动态规划有关的,所以把算法搞懂是必须的,之前看过《编程之美》、《剑指offer》等书籍,但是还是没有养成一种独立的思考问题的能力,所以最近听了师兄的建议,开始分门别类的对各种编程思想进行学习,而第一炮就选了动态规划。
其实,有时候一个人看这类编程思想的书效果并不是很理想,因为有很多是自己想不到的,也许书上有那么一句推倒的话很简单,但是你一下子脑子就是转不过来,这就很浪费时间,而且很伤脑筋,也很有可能导致看完了后面再遇到同样的问题还是不知道该如何解决。所以我就选择了一种集体学习的方法,所谓“三人行,必有我师焉”,和我同一个导师的刚好一共三个人,平时感情都不错,也都坐在一起,于是乎,就开始“匡匡三人行”行了,将比较经典的动态规划题找出那么一些,然后大家一起来考虑解决思路,印象很深刻,分析的也很清晰。下面就十分简要的说明一下我对动态规划的看法。
动态规划主要有以下两个属性:
1、重叠子问题
2、最优子结构
而动态规划最关键的部分就是:找出转移方程
要搞清楚的问题:动态规划只是一种解决问题的思想,使用动态规划的方法不一定是最优的解法。
以上属于个人理解和看法,如有不足,望大家指正批评,后面我将在[动态规划-DP]分类中不断的更新有代表性的题目,刚开始可能先分析一下,然后写出转移方程,后续会陆续更新相关代码~