#include #include using namespace std; int rec(vector>& pole, vector> visited, int larvy, int x, int y, int n, int m) { if (x >= n || x < 0 || y >= m || y < 0) return larvy; if (visited[x][y]) return larvy; if (x == n - 1 && y == m - 1) return pole[x][y] + larvy; int larvyteraz = larvy + pole[x][y]; visited[x][y] = true; int hore = rec(pole, visited, larvyteraz, x + 1, y, n, m); int dole = rec(pole, visited, larvyteraz, x - 1, y, n, m); int doprava = rec(pole, visited, larvyteraz, x, y + 1, n, m); int dolava = rec(pole, visited, larvyteraz, x, y - 1, n, m); vector p = { hore, dole, doprava, dolava }; int max = -1; for (int i = 0; i < 4; i++) { if (p[i] > max) max = p[i]; } return max; } int main() { int n, m; cin >> n >> m; vector> pole = vector>(n,vector(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> pole[i][j]; } } vector> vis = vector>(n, vector(m)); cout << rec(pole, vis, 0, 0, 0, n, m); return 0; }