三角形的最短路径和


这道题使用动态规划求解

1
2 3
4 5 6

dp[i][j]从三角形顶部走到i,j的最短路径和

class Solution {
public:

    int minimumTotal(vector<vector<int>>& triangle) {
        //i行j列
        int m = triangle.size();

        vector<vector<int>> dp(m,vector<int>(m,0));
        dp[0][0] = triangle[0][0];
        //dp[i][j] = min(dp[i-1][j-1],dp[i-1][j])+triangle[i][j]
        //j=0 dp[i][0] = dp[i-1][0]+triangle[i][0]
        //i=j(dp[i-1][j]没有意义) dp[i][i] = dp[i-1][i-1] + triangle[i][i]

        for(int i=1;i<m;++i)
        {
            dp[i][0] = dp[i-1][0]+triangle[i][0];
            for(int j=1;j<i;++j)
            {
                dp[i][j] = min(dp[i-1][j-1],dp[i-1][j])+triangle[i][j];
            }
            dp[i][i] = dp[i-1][i-1] + triangle[i][i];
        }
        return *min_element(dp[m - 1].begin(), dp[m - 1].end());
        
    }
};

posted @ 2021-10-26 11:14  勒勒乐了  阅读(62)  评论(0)    收藏  举报