原题链接:https://leetcode-cn.com/problems/minimum-falling-path-sum/
相关题目:三角形最小路径和
动态规划
dp[i][j]表示[i,j]位置的最小路径和
状态转移
dp[i][j]=min(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1])+A[i][j]
然后找出dp[len-1][j]中最大的即可
代码:
int minFallingPathSum(vector<vector<int>>& A) {
int len=A.size();
if(len==1){
return A[0][0];
}
vector<vector<int>> dp(len,vector<int>(len+2,INT_MAX));
int ans=INT_MAX;
for(int i=1;i<=len;i++){
dp[0][i]=A[0][i-1];
}
for(int i=1;i<len;i++){
for(int j=1;j<=len;j++){
dp[i][j]=min(min(dp[i-1][j],dp[i-1][j+1]),dp[i-1][j-1])+A[i][j-1];
if(i==len-1){
ans=min(ans,dp[i][j]);
}
}
}
return ans;
}