classSolution { public: intcherryPickup(vector<vector<int>>& grid){ int m = size(grid), n = size(grid[0]), res = 0; vector<vector<vector<int>>> f(m, vector<vector<int>>(n, vector<int>(n))); f[0][0][n - 1] = grid[0][0] + grid[0][n - 1]; for (int i = 1; i < m; ++i) { for (int l = 0; l < min(n, i + 1); ++l) { for (int r = max(0, n - i - 1); r < n; ++r) { int t = 0; for (int c1 = max(0, l - 1); c1 <= min(n - 1, l + 1); ++c1) { for (int c2 = max(0, r - 1); c2 <= min(n - 1, r + 1); ++c2) { t = max(t, f[i - 1][c1][c2]); } } if (l == r) { f[i][l][r] = t + grid[i][l]; } else { f[i][l][r] = t + grid[i][l] + grid[i][r]; } res = max(res, f[i][l][r]); } } } return res; } };