原题链接:https://leetcode.com/problems/triangle/
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m = triangle.size(), n = triangle[m-1].size();
auto dp = vector<vector<int>>(m, vector<int>(n, INT_MAX));
dp[m-1] = triangle[m-1];
for (int i = m-2; i >= 0; i -- ) {
for (int j = 0; j < triangle[i].size(); j ++ ) {
dp[i][j] = min(dp[i+1][j], dp[i+1][j+1])+triangle[i][j];
}
}
return dp[0][0];
}
};
优化,O(n)复杂度
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m = triangle.size(), n = triangle[m-1].size();
auto dp = vector<vector<int>>(2, vector<int>(n, INT_MAX));
dp[1] = triangle[m-1];
for (int i = m-2; i >= 0; i -- ) {
for (int j = 0; j < triangle[i].size(); j ++ ) {
dp[0][j] = min(dp[1][j], dp[1][j+1])+triangle[i][j];
}
dp[1] = dp[0];
}
return dp[1][0];
}
};