func_code_string: #include <bits/stdc++.h>   using namespace std;   int dp[605][305][305];   int a[305][305];   int max(int a, int b) { return a > b ? a : b; }   int main() {     int n;     while (scanf( %d , &n) != EOF) {       int i, j, k;       for (i = 0; i < n; i++) {         for (j = 0; j < n; j++) {           scanf( %d , &a[i][j]);         }       }       for (i = 0; i <= 2 * n; i++) {         for (j = 0; j < n; j++) {           for (k = 0; k < n; k++) {             dp[i][j][k] = -1000000000;           }         }       }       dp[0][0][0] = a[0][0];       for (i = 1; i <= 2 * (n - 1); i++) {         for (j = 0; j < n && j <= i; j++) {           if (i - j >= n) continue;           for (k = 0; k < n && k <= i; k++) {             if (i - k >= n) continue;             int y1, y2, s;             if (j == k && i - j == i - k)               s = a[j][i - j];             else               s = a[j][i - j] + a[k][i - k];             if (j - 1 >= 0)               dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - 1][k] + s);             if (j - 1 >= 0 && k - 1 >= 0)               dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - 1][k - 1] + s);             if (k - 1 >= 0)               dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k - 1] + s);             dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k] + s);           }         }       }       printf( %d n , dp[2 * (n - 1)][n - 1][n - 1]);     }     return 0;   }   