#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S min_L( S a,T b) {
return a<= b? a: b;
}
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int X;
int Y;
int dp[ 200 ] [ 200 ] ;
class Solution{
public :
int minFallingPathSum( vector< vector< int >> & A) {
int i, j;
int mn1;
int mn1p;
int mn2;
X = A.size ( ) ;
Y = A[ 0 ] .size ( ) ;
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
dp[ 0 ] [ j] = A[ 0 ] [ j] ;
}
for ( i= ( 1 ) ; i< ( X) ; i++ ) {
mn1 = mn2 = 1073709056 ;
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
if ( mn1 > dp[ i- 1 ] [ j] ) {
mn1 = dp[ i- 1 ] [ j] ;
mn1p = j;
}
}
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
if ( j ! = mn1p) {
chmin( mn2, dp[ i- 1 ] [ j] ) ;
}
}
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
if ( j! = mn1p) {
dp[ i] [ j] = mn1+ A[ i] [ j] ;
}
else {
dp[ i] [ j] = mn2+ A[ i] [ j] ;
}
}
}
{
int KrdatlYV;
int ao_dF3pO;
if ( Y== 0 ) {
ao_dF3pO = 0 ;
}
else {
ao_dF3pO = dp[ X- 1 ] [ 0 ] ;
for ( KrdatlYV= ( 1 ) ; KrdatlYV< ( Y) ; KrdatlYV++ ) {
ao_dF3pO = min_L( ao_dF3pO, dp[ X- 1 ] [ KrdatlYV] ) ;
}
}
return ao_dF3pO;
}
}
}
;
// cLay varsion 20191214-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int X, Y;
// int dp[200][200];
//
//
// class Solution {
// public:
// int minFallingPathSum(vector<vector<int>>& A) {
// int mn1, mn1p, mn2;
// X = A.size();
// Y = A[0].size();
//
// rep(j,Y) dp[0][j] = A[0][j];
// rep(i,1,X){
// mn1 = mn2 = int_inf;
// rep(j,Y) if(mn1 > dp[i-1][j]) mn1 = dp[i-1][j], mn1p = j;
// rep(j,Y) if(j != mn1p) mn2 <?= dp[i-1][j];
// rep(j,Y) dp[i][j] = if[j!=mn1p, mn1, mn2] + A[i][j];
// }
//
// return min(dp[X-1](Y));
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIG1pbl9MKFMgYSxUIGIpewogIHJldHVybiBhPD1iP2E6YjsKfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1pbihTICZhLCBUIGIpewogIGlmKGE+Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IFg7CmludCBZOwppbnQgZHBbMjAwXVsyMDBdOwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IG1pbkZhbGxpbmdQYXRoU3VtKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIEEpewogICAgaW50IGksIGo7CiAgICBpbnQgbW4xOwogICAgaW50IG1uMXA7CiAgICBpbnQgbW4yOwogICAgWCA9IEEuc2l6ZSgpOwogICAgWSA9IEFbMF0uc2l6ZSgpOwogICAgZm9yKGo9KDApO2o8KFkpO2orKyl7CiAgICAgIGRwWzBdW2pdID0gQVswXVtqXTsKICAgIH0KICAgIGZvcihpPSgxKTtpPChYKTtpKyspewogICAgICBtbjEgPSBtbjIgPSAxMDczNzA5MDU2OwogICAgICBmb3Ioaj0oMCk7ajwoWSk7aisrKXsKICAgICAgICBpZihtbjEgPiBkcFtpLTFdW2pdKXsKICAgICAgICAgIG1uMSA9IGRwW2ktMV1bal07CiAgICAgICAgICBtbjFwID0gajsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yKGo9KDApO2o8KFkpO2orKyl7CiAgICAgICAgaWYoaiAhPSBtbjFwKXsKICAgICAgICAgIGNobWluKG1uMiwgZHBbaS0xXVtqXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvcihqPSgwKTtqPChZKTtqKyspewogICAgICAgIGlmKGohPW1uMXApewogICAgICAgICAgZHBbaV1bal0gPW1uMSsgQVtpXVtqXTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgIGRwW2ldW2pdID1tbjIrIEFbaV1bal07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB7CiAgICAgIGludCBLcmRhdGxZVjsKICAgICAgaW50IGFvX2RGM3BPOwogICAgICBpZihZPT0wKXsKICAgICAgICBhb19kRjNwTyA9IDA7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBhb19kRjNwTyA9IGRwW1gtMV1bMF07CiAgICAgICAgZm9yKEtyZGF0bFlWPSgxKTtLcmRhdGxZVjwoWSk7S3JkYXRsWVYrKyl7CiAgICAgICAgICBhb19kRjNwTyA9IG1pbl9MKGFvX2RGM3BPLCBkcFtYLTFdW0tyZGF0bFlWXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhb19kRjNwTzsKICAgIH0KICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAxOTEyMTQtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBpbnQgWCwgWTsKLy8gaW50IGRwWzIwMF1bMjAwXTsKLy8gCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWluRmFsbGluZ1BhdGhTdW0odmVjdG9yPHZlY3RvcjxpbnQ+PiYgQSkgewovLyAgIGludCBtbjEsIG1uMXAsIG1uMjsKLy8gICAgIFggPSBBLnNpemUoKTsKLy8gICAgIFkgPSBBWzBdLnNpemUoKTsKLy8gCi8vICAgICByZXAoaixZKSBkcFswXVtqXSA9IEFbMF1bal07Ci8vICAgICByZXAoaSwxLFgpewovLyAgICAgICBtbjEgPSBtbjIgPSBpbnRfaW5mOwovLyAgICAgICByZXAoaixZKSBpZihtbjEgPiBkcFtpLTFdW2pdKSBtbjEgPSBkcFtpLTFdW2pdLCBtbjFwID0gajsKLy8gICAgICAgcmVwKGosWSkgaWYoaiAhPSBtbjFwKSBtbjIgPD89IGRwW2ktMV1bal07Ci8vICAgICAgIHJlcChqLFkpIGRwW2ldW2pdID0gaWZbaiE9bW4xcCwgbW4xLCBtbjJdICsgQVtpXVtqXTsKLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gbWluKGRwW1gtMV0oWSkpOwovLyAgIH0KLy8gfTsK