一:多阶段决策过程的最优化问题
二:动态规划的基本概念和基本模型构成
1.阶段与阶段变量
2.状态与状态变量
3.决策,决策变量,决策允许集合
4.策略与最优策略(思维核心)
5.状态转移方程(代码核心)
三:最优化原理和无后效性原则
1.最优化原理:最优解只是取决于局部最优,与非最优解关系不大
2.无后效性原则:以后的事情与我现在要做的事情没有关系
四:基本动态规划模型的应用
1.数塔问题
(1)题目
(2)思路
a.爆搜:从第一个开始搜索,一直深搜到数塔的底端,最后一次返回值给顶端
b.记忆化搜索:记录每一个走过的点,再把返回的值储存在一个record数组中,下次遇到record数组,只要有记录,直接返回
c.Dp(顺推):状态转移方程:f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
Dp(逆推):状态转移方程:f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];
(3)伪代码
a.爆搜
b.记忆化搜索
c.Dp(顺推)
2.最长不下降子序列
(1)题目
(2)思路
朴素算法 n^n
单调性优化 nlogn (dalao详细链接)
a.注意怎样输出路径,将一个c数组(需要额外开容量为N),将c[i]定位此时的队列位置,输出的时候从最后开始扫,如果c[i]=len输出,len--,一直到len为0,此时保证了更新的位置到最长不下降子序列的序列尾端的一段没有被漏掉,而是将更 新的位置往后的(注意不是标准长度的队列,只是有拓展)直接踢掉,例如数据 7 9 16 38 49 10,按照策略应该是 7 9 16 38 49 但是更新完的f数组则是 7 9 10 38 49 则不能直接串联输出,需要用数组标记,这样会自动过滤后面的,有点优秀哈,参考这个dalao
(3)优化:如上单调性优化nlogn
(4)伪代码
3.
未完待续~~~