1 class Solution 2 { 3 public: 4 int minFallingPathSum(vector<vector<int>>& A) 5 { 6 vector<vector<int>> B = A; 7 for(int i = 0;i < A.size();i ++) 8 { 9 for(int j = 0;j < A[i].size();j ++) 10 { 11 B[i][j] = A[j][i]; 12 } 13 } 14 15 vector<vector<int>> dp = B; 16 for(int i = B.size()-2;i >= 0;i --) 17 { 18 for(int j = 0;j < B.size();j ++) 19 { 20 if(j==0) 21 { 22 dp[j][i] = min(dp[j][i+1],dp[j+1][i+1]) + B[j][i]; 23 } 24 else if(j==B.size()-1) 25 { 26 dp[j][i] = min(dp[j][i+1],dp[j-1][i+1]) + B[j][i]; 27 } 28 else 29 { 30 dp[j][i] = min(dp[j][i+1],min(dp[j+1][i+1],dp[j-1][i+1])) + B[j][i]; 31 } 32 } 33 } 34 35 int result = 393939; 36 for(int i = 0;i < dp.size();i ++) 37 { 38 if(dp[i][0] < result) 39 result = dp[i][0]; 40 } 41 return result; 42 } 43 };