关于动态规划
动态规划算法的核心就是记住已经解决过的子问题的解。
动态规划有几个典型特征:最优子结构、状态转移方程、边界、重叠子问题。
什么样的问题可以考虑使用动态规划解决呢?
- 如果一个问题,可以把所有可能的答案穷举出来,并且穷举出来后,发现存在重叠子问题,就可以考虑使用动态规划。
动态规划问题的解题思路:
- 穷举分析
- 确定边界
- 找出规律,确定最优子结构
- 写出状态转移方程
动态规划的求解方式有两种:
- 自顶向下的备忘录法
- 自底向上
用这两个方法来解决一个经典的问题:斐波那契数列
方法一: 自顶向下的备忘录法
public static int fib(int n){
if(n<=0){
return n;
}
int[] nums=new int[n+1];
for(int i=0;i<=n;i