const int N = 60;
int m = read(), n = read(), f[N * 2][N][N], a[N][N];
signed main()
{
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= n; ++j)
a[i][j] = read();
memset(f, -1, sizeof(f));
f[2][1][1] = 0;
for (int i = 3; i < m + n; ++i) {
for (int p = 1; p < n; ++p) {
for (int q = p + 1; q <= n; ++q) {
int tmp = f[i][p][q];
tmp = max(tmp, f[i - 1][p][q]);
tmp = max(tmp, f[i - 1][p - 1][q]);
tmp = max(tmp, f[i - 1][p][q - 1]);
tmp = max(tmp, f[i - 1][p - 1][q - 1]);
if (tmp == -1) continue;
f[i][p][q] = tmp + (i - q < 0 ? 0 : a[i - q][q]) + (i - p < 0 ? 0 : a[i - p][p]);
}
}
}
out(f[m + n - 1][n - 1][n], 'l');
return 0;
}
整体思路参考的第一篇题解,但是RE4个点,找不出有什么差别