Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 = 11).
转移方程为 triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];(j不是该行第一个和最后一个元素)
j 第一个元素,triangle[i][j] = triangle[i-1][j];
j 最后一个元素, triangle[i][j-1] = triangle[i-1][j-2];
class Solution {
public:
int min(int a,int b){
if(a > b)
return b;
else
return a;
}
int minimumTotal(vector<vector<int> > &triangle) {
int m = triangle.size();
int i = 0;
int j = 0;
for(i = 1;i < m;i++)
{
int n = triangle[i].size();
triangle[i][0] = triangle[i][0] + triangle[i-1][0];
for(j = 1;j<n-1;j++)
{
triangle[i][j] = min(triangle[i-1][j-1] ,triangle[i-1][j]) + triangle[i][j];
}
triangle[i][n-1] = triangle[i][n-1] + triangle[i-1][n-2];
}
int min_index = INT_MAX;
for(i = 0;i<triangle[m-1].size();i++)
{
if(min_index > triangle[m-1][i])
{
min_index = triangle[m-1][i];
}
}
return min_index;
}
};