动态规划是一种思想,大规模的问题的依赖于小规模问题的计算结果。他主要解决三大类问题:求最值,求方案可行性,求方案总数。

自顶向上的动态规划
题目描述:每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
class Solution {public:int minimumTotal(vector<vector<int>>& triangle) {vector<vector<int>> array = triangle;int len = array.size();for(int i = 0; i < len - 1; i++){for(int j = 0; j < i + 1; j++){array[i][j] = 0;}}for(int i = len - 2; i > -1; i--){for(int j = 0; j < i + 1; j++){array[i][j] = min(array[i + 1][j], array[i + 1][j + 1]) + triangle[i][j];}}return array[0][0];}};
思路:先求出倒数第二层到最底层的最短路径,然后逐步向上求解。
动态规划四要素
动态规划的状态
用数组代表在某些特定条件下某个规模更小的问题和答案
规模更小用参数i,j之类的来划定
动态规划的方程
大问题如何拆解为小问题
f[i][j]=通过规模更小的一些状态来进行推到
动态规划的初始化
设定无法再拆解的极限笑的状态下的值
如f[i][0]或者f[0][i]
动态规划的答案
最后要求的答案是什么
