题目来源
解题方法
都知道的dp,但是对这题而言,从下到上是非常简单的,直接上代码,思路就很清晰了
class Solution {
public:
int minimumTotal(vector<vector<int>>& t) {
for(int i=t.size()-2; i>=0; i--)
for(int j=0;j<t[i].size();j++){
t[i][j]+=min(t[i+1][j],t[i+1][j+1]);
}
return t[0][0];
}
};
那么如何使用空间为O(n)的方法呢,也就是用一维dp来存储
class Solution {
public:
int minimumTotal(vector<vector<int>>& t) {
int n=t.size();
vector<int> dp=t[n-1];
for(int i=n-2;i>=0;i--)
for(int j=0;j<=i;j++){
dp[j]=t[i][j]+min(dp[j],dp[j+1]);
}
return dp[0];
}
};