题目:
https://leetcode-cn.com/problems/triangle/
题解:
DP 使用一个二维数组用以记录当前 第i行 第j列 的最短 路径,在 最后一行字中选择 最短的 路径 (优化 在原输入数组上直接更新)
递推公式:dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+dp[i][j];
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n = triangle.size();
for (int i = 1; i < n; ++i) {
for (int j = 0; j < triangle[i].size(); ++j) {
if (j == 0) triangle[i][j] += triangle[i - 1][j];
else if (j == triangle[i].size() - 1) triangle[i][j] += triangle[i - 1][j - 1];
else {
triangle[i][j] += min(triangle[i - 1][j - 1], triangle[i - 1][j]);
}
}
}
int ans = triangle[n - 1][0];
for (int i = 0; i < triangle[n - 1].size(); ++i) {
ans = min(ans, triangle[n - 1][i]);
}
return ans;
}
};