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++
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;
|
|
}
|