class Solution1 { private: vector<vector<int>> memo; //cache int m; // 行数 // i,j代表当前节点的索引 int minPathSum(vector<vector<int>>& triangle, int i, int j) { if (i == m - 1) return triangle[i][j]; // 相同结构子问题的递归 if (memo[i][j] == -1) { memo[i][j] = min(minPathSum(triangle, i + 1, j), minPathSum(triangle, i + 1, j + 1)) + triangle[i][j]; cout <<"memo["<<i<<"]["<<j<<"] : "<< memo[i][j] << endl; } return memo[i][j]; }
public: int minimumTotal(vector<vector<int>>& triangle) { if (triangle.size() == 0) return 0; // triangle中应该都是正数吧 int res; m = triangle.size(); //构造cache容器 for (int i = 0; i < m; i++) { vector<int> tmp(triangle[i].size(), -1); memo.push_back(tmp); } res = minPathSum(triangle, 0, 0); return res; } };