【leetcode】Triangle

来源:互联网 发布:三层交换机端口配置ip 编辑:程序博客网 时间:2024/05/20 00:48

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
这里写图片描述
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
思路:
很明显就是动态规划的题目;
最优子结构为res[j]=min(res[j-1],res[j])+triangle[i][j];
表示记录到达本行第j个数字时的最小值。

class Solution {public:    int minimumTotal(vector<vector<int> > &triangle) {        int n=triangle.size();        if(n==0) return 0;        int *res;        res=(int *)malloc(n*sizeof(int));        memset(res,0,n*sizeof(int));        res[0]=triangle[0][0];//res[j]记录到达本行第j个数字时的最小值        for(int i=1;i<n;i++)            for(int j=triangle[i].size()-1;j>=0;j--)            {                if(j==0)                    res[j]=res[j]+triangle[i][j];                else if(j==triangle[i].size()-1)                    res[j]=res[j-1]+triangle[i][j];                else                    res[j]=min(res[j-1],res[j])+triangle[i][j];            }        int minres=INT_MAX;        for(int i=0;i<n;i++)        {            minres=min(res[i],minres);        }        return minres;    }};
0 0
原创粉丝点击