思路同方格取数
#include <iostream>
using namespace std;
int m, n, mat[55][55], f[105][55][55];
int main() {
scanf("%d%d", &m, &n);
for (int i = 1; i <= m; i ++) {
for (int j = 1; j <= n; j ++) {
scanf("%d", &mat[i][j]);
}
}
for (int k = 2; k <= m + n; k++) {
for (int i1 = max(1, k - n); i1 <= min(k - 1, m); i1 ++) {
for (int i2 = max(1, k - n); i2 <= min(k - 1, m); i2 ++) {
int max_f = max(f[k - 1][i1 - 1][i2 - 1], max (f[k - 1][i1][i2 - 1], max(f[k - 1][i1 - 1][i2], f[k - 1][i1][i2])));
if (i1 != i2) f[k][i1][i2] = max_f + mat[i1][k - i1] + mat[i2][k - i2];
else f[k][i1][i2] = max_f + mat[i1][k - i1];
}
}
}
printf("%d\n", f[m + n][m][m]);
return 0;
}