Leetcode(剑指offer专项训练)——DP专项(2)

三角形中最小路径之和

1.题目描述

给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
链接

2.思路题解

首先想到的最简单的思路是dp存储每个位置对应的最小路径和,每一个位置对应的可能的路径和=min(dp(i-1,j-1),dp(i-1,j)),对于边界条件需要针对性的特别制定,于是题解如下:

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int m=triangle.size();
        if(m==1){
            return triangle[0][0];
        }
        vector<vector<int> >dp(m);
        dp[0]=vector<int>(1);
        dp[0][0]=triangle[0][0];
        int ans=999999;
        for(int i=1;i<m;i++){
            dp[i]=vector<int>(i+1);
            dp[i][0]=dp[i-1][0]+triangle[i][0];
            if(i==m-1&&dp[i][0]<ans){
                ans=dp[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];
                if(i==m-1&&ans>dp[i][j]){
                    ans=dp[i][j];
                }
            }
            dp[i][i]=dp[i-1][i-1]+triangle[i][i];
            if(i==m-1&&ans>dp[i][i]){
                ans=dp[i][i];
            }
        }
        return ans;
    }
};
posted @ 2023-03-24 19:37  理想国的糕  阅读(9)  评论(0编辑  收藏  举报