动态规划
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
递推、贪心、搜索和动态规划该如何选择???
一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!
- 每个阶段只有一个状态---->递推;
- 每个阶段的最优状态都是由上一个阶段的最优状态得到的---->贪心;
- 每个阶段的最优状态是由之前所有阶段的状态的组合得到的---->搜索;
- 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的---->动态规划。
动态规划之Fib数列
有个小孩上楼梯,共有N阶楼梯,小孩一次可以上1阶,2阶。走到N阶楼梯,一共有多少种走法?
DP之自顶向下分析方式:
爬到第N阶楼梯,一共只有2种情况(全划分,加法原理),从第N-1阶爬1阶到第N阶;从第N-2阶爬2阶到第N阶;
故:way(N)=way(N-1)+way(N-2)
任务安排问题
代码实现
数组arr存储的是每个任务的收益;
arr = [0, 5, 1, 8, 4, 6, 3, 2, 4]
#数组prev存储的是指定任务之前可以执行的任务
prev = [0