You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
982 B
C++

#include <cassert>
#include <cstdio>
#include <cstring>
int a[51][51], f[110][51][51], m, n;
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
memset(f, -1, sizeof(f));
scanf("%d%d", &m, &n);
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
f[1][1][1] = 0;
for (int i = 1; i <= n + m; i++)
for (int j = 1; j <= m && j <= i; j++)
for (int k = 1; k <= m && k <= i; k++)
if (j != k || i == n + m)
{
f[i][j][k] = max(f[i][j][k], f[i - 1][j][k]);
f[i][j][k] = max(f[i][j][k], f[i - 1][j - 1][k - 1]);
f[i][j][k] = max(f[i][j][k], f[i - 1][j - 1][k]);
f[i][j][k] = max(f[i][j][k], f[i - 1][j][k - 1]);
f[i][j][k] += a[j][i - j + 1] + a[k][i - k + 1];
}
printf("%d", f[n + m][m][m]);
return 0;
}