f[i][j][k] 表示走了i步 ,第一个 在 j 行 , 第二个 在 k 行 ,可以得到 列 = i - j/(k) + 1 ,
for (int i = 2 ; i <= (n << 1) - 1; ++i) {
for (int j = 1 ; j <= n ; ++j) {
if (i - j + 1 < 1 or i - j + 1 > n) continue ;
for (int k = 1 ; k <= n ; ++k) {
if (i - k + 1 < 1 or i - k + 1 > n) continue ;
int _ = 0 ;
if (k == j) _ = a[k][i + 1 - k] ;
else _ = a[k][i + 1 - k] + a[j][i + 1 - j] ;
f[i][j][k] = max (f[i][j][k] , f[i - 1][j][k] + _) ;
f[i][j][k] = max (f[i][j][k] , f[i - 1][j - 1][k] + _) ;
f[i][j][k] = max (f[i][j][k] , f[i - 1][j][k - 1] + _) ;
f[i][j][k] = max (f[i][j][k] , f[i - 1][j - 1][k - 1] + _) ;
}
}
}
printf ("%d" , f[(n << 1) - 1][n][n]) ;