路径规划04

路径规划04

三角形动态规划

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int dp[200][200];
        memset(dp,0,sizeof(dp));
        //状态转移方程:dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])
        int depth=triangle.size();
        dp[0][0]=triangle[0][0];
        for(int i=0;i<depth;i++){
            for(int j=0;j<triangle[i].size();j++){
                if(i>0 && j>0 && j<triangle[i].size()-1){
                    dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j];
                }else if(j>0){
                    dp[i][j]=dp[i-1][j-1]+triangle[i][j];
                }else if(j<triangle[i].size()-1){
                    dp[i][j]=dp[i-1][j]+triangle[i][j];
                }
            }
        }
        //迭代完后最后一排保留对应树顶到每个最后一排数的最短路径值
        //需要找出最短的一条
        int minel = 2147483647;;
        for(int i=0;i<depth;i++){
            minel=min(minel,dp[depth-1][i]);
        }
        return minel;
    }
};
状态转移方程:dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])
迭代方向:自顶向下
边界条件:三角形的“三边”,两条腰作为迭代边界,程序最后底边进行最短判断
posted @ 2021-11-25 20:26  秋月桐  阅读(37)  评论(0编辑  收藏  举报