边学边记
基本概念
动态规划(MatrixChain):
基本思想:将待求解的问题分解成若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。创建记录子问题的表格,避免重复计算子问题
在解某一问题的直接递归算法所产生的递归树中,相同子问题反复出现,并且不同子问题相对较少
使用条件:
1.原问题可以划分为子问题
2.拥有最优子结构(原问题最优解包含子问题最优解)
3.拥有重叠子问题(子问题的解可以重复利用)
动态规划2个基本要素
最优子结构:原问题的最优解由子问题的最优解组合而成,子问题可以独立求解。
重叠子问题:子问题的重叠性质。避免重复计算,记录算过的子问题从而避开。
动态规划法变形—备忘录方法(MemoizedMatrixChain)
区别:递归方法不同
动态规划法 自底向上递归
备忘录方法 自顶向上递归
其余相同
这个方法回为每个子问题建立一个记录项,初始化时存入一个特殊的值,表示该问题尚未求解。所以是动态规划的变形方法,都有记录子问题的表格。
动态规划解题步骤:
1.找出最优解的性质,并刻画其结构特征
2.递归的定义最优值
3.以自底向上的方式计算最优值
4.根据计算的最优值时得到的信息,构造最优解
1-3步 ------ 找最优解 4步------ 构造最优解
案例
矩阵连乘问题
例如:
上式即为最优递推公式,完成了第二步
例题
最长公共子序列
考点:写出C数组和rec数组,注意怎么写出最大公共子序列。从右下角开始找起
最大字段和问题
注意:这里的起始位置,可以设置为 -1 或者是 0
从后往前找
凸多边形最优三角形剖分问题
这里题目要给出各边的权值后,便可找出权值之和的各个三角形
这个问题不常见
0-1背包问题
重点问题!
考点,给物品, 怎么装
有个相似问题,背包问题