动态规划
定义:动态规划是一种将复杂问题分解为一组更简单的子问题、只解决每个子问题并存储它们的解,来解决复杂
问题的方法
最优子结构
如果一个问题的最优解包含子问题的最优解,则称此问题具有最优子结构
动态规划思想解决最优化问题的基本步骤:
1、判断问题是否具有最优子结构性质,如果不具备则不能够用动态规划
2、把问题分成若干个子问题(分阶段)
3、建立转态转移方程
4、找出边界条件
5、将已知边界值代入方程
6、递推求解
数字三角形问题
题目描述:
请编一个程序根据展示出的三角形,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
每一步可沿左斜线向下或右斜线向下走;三角形行数小于等于100;三角形中的数字为整数;
【输入描述】
第一行为N,表示有N行后面N行表示三角形每条路的路径权
【输出描述】
路径所经过的数字的总和最大的答案
【样例输入】
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
【样例输出】
30
题目分析
首先判断当前问题是否符合最优子结构,要判断是否含有最优子结构,就必须先对当前问题进行分阶段讨论,要到达最优一层的值要最大,可以分解问到达倒数第二层的最大值,所以符合最优子结构。
阶段划分为一层一层进行求解。第三步建立转态转移方程:由于此时只能向下或者向右下角这两个方向走,所以此时状态转移方程为:f[i][j] = max(f[i-1][j], f[i-1][j-1]) + a[i][j]。方程的含义为f[i][j]:第i层,到达第j个数的最大值。
第4步找出边界条件:对于f[1][1],步符合方程求解,所以此时将f[1][1] = 1进行单独处理。
数字三角形4
【题目描述】
数字三角形必须经过某一个点,使之走的路程和最大
【输入描述】
第一行n,表示n行(n<=25), 第2到n+1行为每个点的权值,第n+2行为两个数x,y,表示数字三角形必须经过的点。
【输出】
所走路程的最大值
解题思路
只需要将x,y这个点所在这一行除了x,y这个点以外其他的全部赋为负无穷即可。其他的点正常更新即可。
数字三角形2
【题目描述】
数字三角形 求走到最后mod 100的最大值
【输入描述】
第一行n,表示n行(n<=25) 第2行到n+1行为每个点的权值
【输出描述】
mod 100最大值
【输入样例】
2
1
99 98
【样例输出】
99
这道题的解法就是将经过这个点的所有的余数都存储起来然后再一个个取进行尝试即可。