1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 const int MAXN=51;
6 const int maxn=1001;
7 int map[MAXN][MAXN];
8 int f[MAXN][MAXN][MAXN][MAXN];
9 int main()
10 {
11 int n,m;
12 scanf("%d%d",&n,&m);
13 for(int i=1;i<=n;i++)
14 {
15 for(int j=1;j<=m;j++)
16 {
17 scanf("%d",&map[i][j]);
18 }
19 }
20 for(int i=1;i<=n;i++)
21 {
22 for(int j=1;j<=m;j++)
23 {
24 for(int k=1;k<=n;k++)
25 {
26 for(int l=j+1;l<=m;l++)// 注意l必须等于j+1才能保证两条路线不相交
27 {
28 f[i][j][k][l]=map[i][j]+map[k][l]+max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k-1][l],f[i][j-1][k][l-1]));
29 } // 1上 2上 1 up 2left 1left 2up
30 }
31 }
32 }
33 printf("%d",f[n][m-1][n-1][m]);
34 return 0;
35 }