#include <bits/stdc++.h>   #pragma comment(linker,  /STACK:536870912 )   #pragma warning(disable : 4996)   using namespace std;   const int N = 305;   int dp[N * 2][N][N], ar[N][N];   int n;   pair<int, int> getC(int t, int i) {     return t <= n - 1 ? make_pair(t - i, i) : make_pair(n - 1 - i, t - n + 1 + i);   }   int getS(int t) { return t <= n - 1 ? t + 1 : (2 * n - 1 - t); }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) scanf( %d , &ar[i][j]);     }     memset(dp, 128, sizeof(dp));     ;     dp[0][0][0] = ar[0][0];     for (int i = 0; i < 2 * n - 2; i++) {       int t = getS(i + 1), c = getS(i);       for (int a = 0; a < c; a++) {         for (int b = 0; b < c; b++) {           for (int p = (i < n - 1 ? 0 : -1); p < (i < n - 1 ? 2 : 1); p++) {             for (int q = (i < n - 1 ? 0 : -1); q < (i < n - 1 ? 2 : 1); q++) {               auto g = getC(i + 1, a + p), h = getC(i + 1, b + q);               if (g.first >= n || g.second >= n || h.first >= n ||                   h.second >= n || g.first < 0 || g.second < 0 || h.first < 0 ||                   h.second < 0)                 continue;               int sum = dp[i][a][b] + ar[g.first][g.second];               if (g != h) sum += ar[h.first][h.second];               dp[i + 1][a + p][b + q] = max(dp[i + 1][a + p][b + q], sum);             }           }         }       }     }     printf( %d , dp[2 * n - 2][0][0]);     return 0;   }   