0pts求助,悬关
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long l;
l dp[55][55][55][55], a[55][55], n, m, num;
l f(l x1, l y1, l x2, l y2) {
if (x1 < 1 || x2 < 1 || y1 < 1 || y2 < 1 || x1 > n || x2 > n || y1 > m || y2 > m || y2 < y1) return 0;
if (dp[x1][y1][x2][y2] > 0) return dp[x1][y1][x2][y2];
dp[x1][y1][x2][y2] = max({f(x1 - 1, y1, x2 - 1, y2), f(x1 - 1, y1, x2, y2 - 1), f(x1, y1 - 1, x2 - 1, y2), f(x1, y1 - 1, x2, y2 - 1)}) + a[x1][y1] + a[x2][y2];
return dp[x1][y1][x2][y2];
}
int main() {
memset(dp, 0, sizeof(dp));
scanf("%lld%lld", &n, &m);
for (l i = 1; i <= n; ++i) {
for (l j = 1; j <= m; ++j) {
scanf("%lld", &a[i][j]);
}
}
printf("%lld", f(m - 1, n, m, n - 1));
return 0;
}