简介
自底部向上
使用回溯
超时算法
class Solution {
public:
int minValue;
void dfs(vector<vector<int>>& triangle, int value, int depth, int index){
if(depth == triangle.size()){
if(minValue > value){
minValue = value;
}
return;
}
dfs(triangle, value + triangle[depth][index], depth + 1, index);
dfs(triangle, value + triangle[depth][index], depth + 1, index + 1);
}
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size() == 0){
return 0;
}
minValue = 100000;
dfs(triangle, 0, 0, 0);
return minValue;
}
};
自底向上
class Solution {
public:
int minimumTotal(vector<vector<int>>& fuckDP) {
for (int i = fuckDP.size() - 2; i >= 0; --i)
for (int j = 0; j < fuckDP[i].size(); ++j)
fuckDP[i][j] += min(fuckDP[i + 1][j], fuckDP[i + 1][j + 1]);
return fuckDP[0][0];
}
};
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》