class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (triangle.empty()) return 0;
int n = triangle.size();
int* res = new int[n];
res[0] = triangle[0][0];
for (int i = 1; i < n; ++i) {
for (int j = i; j >= 0; --j) {
if (j == 0) {
res[j] = res[j] + triangle[i][j];
}
else if (j == i) {
res[j] = res[j - 1] + triangle[i][j];
}
else {
res[j] = res[j - 1] > res[j] ? res[j] : res[j - 1];
res[j] += triangle[i][j];
}
}
}
int min = res[0];
for (int i = 0; i < n; ++i) {
if (min > res[i]) min = res[i];
}
return min;
}
};