题目
提示:
1 <= triangle.length <= 200
triangle[0].length == 1
triangle[i].length == triangle[i - 1].length + 1
-104 <= triangle[i][j] <= 104
进阶:
你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题吗?
题解
动态规划
代码
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m=triangle.size();
if(m==1)
return triangle[0][0];
vector<vector<int>> dp(m, vector<int>(m));
dp[0][0]=triangle[0][0];
int res;
for(int j=1;j<m;j++){
res=1000000;
for(int i=0;i<triangle[j].size();i++){
if(i==0){
dp[j][i]=dp[j-1][i]+triangle[j][i];
}
else if(i==triangle[j].size()-1){
dp[j][i]=dp[j-1][i-1]+triangle[j][i];
}
else{
dp[j][i]=min(dp[j-1][i-1]+triangle[j][i],dp[j-1][i]+triangle[j][i]);
}
res=min(res,dp[j][i]);
}
}
return res;
}
};