首页 > 代码库 > Triangle --- 至顶向下求最小值

Triangle --- 至顶向下求最小值

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).

 

典型的球最短路径的问题,需要使用动态规划的思想,从上到下依次求每个点的最小距离 

 

int minimumTotal(vector<vector<int> > &triangle) {        int nSize = triangle.size();        if (nSize<1)            return 0;        vector<int> sums(nSize);        vector<int> tmps(nSize);            sums[0] = triangle[0][0];        for (int  i = 1;  i < nSize;  i++)        {            vector<int> vals = triangle[i];            int nNum = vals.size();                 tmps = sums;            sums[0] = tmps[0] + vals[0];            for (int j=1; j<i; j++)            {                sums[j] = tmps[j-1]>tmps[j]?tmps[j]+vals[j]:tmps[j-1]+vals[j];            }                sums[i] = tmps[i-1]+vals[i];        }            int nMin = sums[0];        for (int i = 1; i < nSize; i++)        {            if (sums[i] < nMin)                nMin = sums[i];        }            return nMin;    }

 

Triangle --- 至顶向下求最小值