路径规划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])
迭代方向:自顶向下
边界条件:三角形的“三边”,两条腰作为迭代边界,程序最后底边进行最短判断