用了三维DP
50%WA,50%AC
#include <iostream>
using namespace std;
const int maxn = 55;
int m, n;
int maze[maxn][maxn];
int f[maxn][maxn][maxn * 2]; // f[the first person's line][the second person's line][the step of now];
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> maze[i][j];
}
}
// ok
for (int k = 1; k <= m + n - 1; k++) {
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
int x1 = i;
int y1 = k - i + 1;
int x2 = j;
int y2 = k - j + 1;
f[i][j][k] = max(max(f[i - 1][j - 1][k - 1], f[i - 1][j][k - 1]), max(f[i][j - 1][k - 1], f[i][j][k - 1]));
if (x1 != x2 or y1 != y2) {
f[i][j][k] += maze[x1][y1] + maze[x2][y2];
} else {
f[i][j][k] += maze[x1][y1];
}
}
}
}
cout << f[n][n][n + m - 1] << endl;
}