题意:从三角形顶端沿路径向下到底部,求沿途结点之和最小。
思路:简单DP, 取两肩较小者。
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size() == 1) return triangle[0][0];
vector<vector<int> > re;
vector<int> t;
t.push_back(triangle[0][0]);
re.push_back(t);
for(int i = 1; i < triangle.size(); ++ i) {
vector<int> tt;
tt = re.back();
vector<int> rre;
for(int j = 0; j < triangle[i].size(); j ++) {
if(j - 1 < 0) {
rre.push_back(triangle[i][j] + tt[j]);
continue;
}
if(j >= tt.size()) {
rre.push_back(triangle[i][j] + tt[j - 1]);
continue;
}
if(tt[j] > tt[j - 1]) {
rre.push_back(triangle[i][j] + tt[j - 1]);
}
else{
rre.push_back(triangle[i][j] + tt[j]);
}
}
re.push_back(rre);
}
vector<int> tempre = re.back();
int min = 999999999;
for(int i = 0; i < tempre.size(); ++ i) {
if(min > tempre[i]) min = tempre[i];
}
return min;
}
};