#include #include #include int a[51][51], f[110][51][51], m, n; int max(int a, int b) { return a > b ? a : b; } int main() { memset(f, -1, sizeof(f)); scanf("%d%d", &m, &n); for (int i = 1; i <= m; i++) for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]); f[1][1][1] = 0; for (int i = 1; i <= n + m; i++) for (int j = 1; j <= m && j <= i; j++) for (int k = 1; k <= m && k <= i; k++) if (j != k || i == n + m) { 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 - 1]); 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] += a[j][i - j + 1] + a[k][i - k + 1]; } printf("%d", f[n + m][m][m]); return 0; }