Leetcode-120 三角形最小路径和

题目

快乐做一个DP厨。

二维朴素解法

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int mm=INT_MAX;
        int level=triangle.size();
        vector<vector<int>> dp(level+1,vector<int>(triangle[level-1].size()+1,INT_MAX));
        dp[1][1]=triangle[0][0];
        for(int i=2;i<=level;i++)
        {
            for(int j=1;j<=triangle[i-1].size();j++)
            {
                dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+triangle[i-1][j-1];
            }
        }
        for(int i=1;i<dp[0].size();i++)
        {
            mm=min(mm,dp[level][i]);
        }
        return mm;
    }
};

一维压缩

dp[j]:表示行中的第j个元素能达到的最小值。
自底而上计算。

例如题中测试样例

4 1 8 3 0 
7 6 10 3 0 
9 10 10 3 0 
11 10 10 3 0 
class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int level=triangle.size();
        vector<int> dp(level+1,0);
        for(int i=level-1;i>=0;i--)
        {
            for(int j=0;j<=i;j++)
            {
                dp[j]=min(dp[j+1],dp[j])+triangle[i][j];
            }
        }
        return dp[0];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章