120 Triangle
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]0: 2147483647 2 2147483647
1: 2147483647 5 6 2147483647
2: 2147483647 11 10 13 2147483647
3: 2147483647 15 11 18 16 2147483647void refine_triangle_matrix(vector<vector<int>> &triangle)
{
if (triangle.empty()) return;
const size_t col_size = triangle.size();
const size_t row_size = triangle.at(0).size();
// inserting int max since we are minimizing the
// entire thing (hence these additions get ignored)
for (int i = 0; i < col_size; i++) {
triangle.at(i).push_back(INT_MAX);
auto it = triangle.at(i).begin();
triangle.at(i).insert(it, INT_MAX);
}
}
int minimumTotal(vector<vector<int>>& triangle)
{
if (triangle.empty()) return 0;
refine_triangle_matrix(triangle);
const size_t col_size = triangle.size();
for (int i = 1; i < col_size; i++) {
for (int j = 1; j < triangle.at(i).size() - 1; j++) {
int top_left = triangle[i - 1][j - 1];
int top_right = triangle[i - 1][j];
triangle[i][j] += min(top_left, top_right);
}
}
//print2d(triangle); pause();
return *min_element(triangle.at(col_size - 1).begin() + 1, triangle.at(col_size - 1).end() - 1);
}
// testing
int main()
{
vector<vector<int>> tri =
{
{ 2 },
{ 3,4 },
{ 6,5,7 },
{ 4,1,8,3 }
};
cout << minimumTotal(tri) << endl;
}Last updated