动态规划概述:
-
动态规划是一种通过子问题的解来求原问题解的递归算法。动态规划是用来求解重叠子问题的,即不同的问题具有公共子问题。
-
动态规划的核心就是对每个子问题只求解一次,将每个子问题的结果保留在一个数组中,从而无需每次求解子问题时都要重复计算,避免了不必要的重复计算。
动态规划方法求解的问题类型:
(1)**最优化问题:**对于一个问题有许多可行解,每一个解都有一个值,要求寻找具有最优值的解。如:背包问题、最长上升子序列等问题等。
(2)组合计数问题: 对于一个解组合问题有多种选法,计算选取方法有多少种。例如:组合计数问题、数位统计问题、基于连通性的动态规划等。
(3)**可行性问题:**对于一个问题判断是否具有可行解。例如,动态规划求解博弈类问题。
1.数字三角形
问题描述:
一个数字三角形宝塔,数字三角形中的数字都是不超过100的正整数。现在规定一个人从最顶层走到最底层,每一步可沿左斜线或右斜线向下走。求解从顶层到最底层的一条路径,使得沿着该路径所经过的数字的总和最大,输出最大值。