class Solution {
public:
int mymin(int a,int b,int c){
return min(a,min(b,c));
}
int minFallingPathSum(vector<vector<int>>& A) {
int N = A.size();
int dp[N+2][N+2];
memset(dp,0,sizeof(dp));
for(int i=0;i<=N;i++) dp[i][0] = dp[i][N+1] = 0x3f3f3f3f;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
dp[i+1][j+1] = A[i][j] +
mymin(dp[i][j],dp[i][j+1],dp[i][j+2]);
}
}
int ans = 0x3f3f3f3f;
for(int i=1;i<=N;i++) ans=min(ans,dp[N][i]);
return ans;
}
};