https://leetcode-cn.com/problems/triangle/
二维dp
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (triangle.size() == 0) return 0;
int dp[triangle.size()][triangle.size()];
dp[0][0] = triangle[0][0];
for (int i = 1; i < triangle.size(); ++i)
{
dp[i][0] = triangle[i][0]+dp[i-1][0];
for (int j = 1; j < i; ++j)
{
dp[i][j] = triangle[i][j] + min(dp[i-1][j-1], dp[i-1][j]);
}
dp[i][i] = triangle[i][i] + dp[i-1][i-1];
}
int ans = INT_MAX;
for (int i = 0; i < triangle.size(); ++i)
{
ans = min(dp[triangle.size()-1][i], ans);
}
return ans;
}
};
一唯DP
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (triangle.size() == 0) return 0;
int dp[triangle.size()];
dp[0] = triangle[0][0];
for (int i = 1; i < triangle.size(); ++i)
{
int prev = dp[0];
dp[0] = triangle[i][0]+dp[0];
for (int j = 1; j < i; ++j)
{
int tmp = dp[j];
dp[j] = triangle[i][j] + min(prev, dp[j]);
prev = tmp;
}
dp[i] = triangle[i][i] + prev;
}
int ans = INT_MAX;
for (int i = 0; i < triangle.size(); ++i)
{
ans = min(dp[i], ans);
}
return ans;
}
};