WA #2 #4 #6 #8 #9
#include <iostream>
using namespace std;
int m, n, map[55][55], dp[110][55][55];
int main()
{
cin >> m >> n;
for (int i = 1; i <= m; i ++)
for (int j = 1; j <= n; j ++)
cin >> map[i][j];
dp[0][1][1] = map[1][1];
for (int k = 1; k <= m + n - 2; k ++)
for (int i = 1; i <= m; i ++)
for (int j = 1; j <= n; j ++)
{
dp[k][i][j] = max(max(dp[k - 1][i][j], dp[k - 1][i - 1][j - 1]), max(dp[k - 1][i - 1][j], dp[k - 1][i][j - 1])) + map[i][k - i + 2];
if (i != j) dp[k][i][j] += map[j][k - j + 2];
}
cout << dp[m + n - 2][m][n] << endl;
return 0;
}