动态规划
首先什么是动态规划?
用动态思想的解决问题。一个大问题分解成若干个子问题,对子问题求解,其中一个子问题的求解会影响另一个子问题的求解,求解出所有子问题的可能情况,选择出最合适的情况即可。
为什么是动态规划?
动态规划涵盖范围大,他可以解决不少问题,包括贪心问题。但动态规划中的有些问题并不能用贪心来解决,动态规划是统筹全局的算法,他看的并不仅仅是眼前的最优解而是总体的最优解,需要的是全局思想。
动态规划特征
1.动态规划具有多阶段决策的特征,每一阶段都有每一阶段相应的“状态”。
2.每一阶段都面临不同的决策,对当前决策的不同选择会导致下一阶段的不同状态。
3.每一阶段的最优解问题可以递归成下一阶段各个可能状态的最优解问题,各个子问题与原问题有着相同的子结构。
动态规划的重要概念
阶段
状态
决策
状态转移方程(核心)
动态规划问题步骤
1.先判断,看看问题是否有最优子结构,如果没有,这不能用动态规划解题;
2.将问题分成若干个子问题(分阶段);
3.建立状态转移方程(精髓:递推方程);
4.找出边界;
5.将边界值带入方程;
6.递推求解。
小例题
描述
设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:
若要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
输入
第一行为n(n<50),表示数塔的层数
从第2行至n+1行,每行有若干个数据,表示数塔中的数值。
输出
最大的路径值。
样例输入
5
13
11 8
12 7 26
6 14 15 8
12 7 13 24 11
样例输出
86
题目分析