最近看了一篇讲解动态规划的知乎文章,讲的很清楚,使我对动态规划题目的解答思路更加清晰。
1、什么情况下会用到动态规划呢?
动态规划是解决决策过程最优化问题的常用方法。
2、动态规划的基本思想
a)将问题划分为若干个互相联系的子问题,先求出子问题的解,然后通过子问题的解求出问题的解。
b)对于重复出现的子问题,只需在第一次遇到时计算,然后将结果保存起来,之后遇到相同子问题直接使用结果值,不必再重复计算。保存子问题的结果一般采用数组,一维数组或二维数组。
3、动态规划问题的解题思路
a)定义子问题表达式,即数组元素的含义。假如使用一维数组dp存储子问题结果。那么元素值dp[i]表示什么意思?
b)找出数组元素之间的关系。方法类似数学的归纳法。比如dp[n]与dp[n-1]... dp[1]等的关系是什么,比如:dp[n] = dp[n-1] + dp[n-2]。
c)找出初始值。找出各个元素的递推关系之后,得有一个初始的值,这样才能一步步计算得到dp[n]的值。
要求什么,就将dp[n]定义成什么。
具体算法举例自己私下实践。
参考:https://zhuanlan.zhihu.com/p/91582909