leetcode 120. 三角形最小路径和

https://leetcode-cn.com/problems/triangle/ 

二维dp

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

一唯DP

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

 

你可能感兴趣的:(leetcode)