3
int solve(int r1, int c1, int r2, vector<vector<int>> &grid, vector<vector<vector<int>>> &dp) {9
int c2 = (r1 + c1) - r2;12
if (r1 >= grid.size() || r2 >= grid.size() || c1 >= grid[0].size() || c2 >= grid[0].size() ||13
grid[r1][c1] == -1 || grid[r2][c2] == -1) {16
if (r1 == grid.size() - 1 && c1 == grid[0].size() - 1) {20
if (dp[r1][c1][r2] != -1) {21
return dp[r1][c1][r2];24
if (r1 == r2 && c1 == c2) {26
// if both players are at the same place than collect cherry only one29
ch += grid[r1][c1] + grid[r2][c2];33
// Trying all the possible paths for both the players35
int hh = solve(r1, c1 + 1, r2, grid, dp);36
int vh = solve(r1 + 1, c1, r2, grid, dp);37
int vv = solve(r1 + 1, c1, r2 + 1, grid, dp);38
int hv = solve(r1, c1 + 1, r2 + 1, grid, dp);40
// collecting maximum cherries from possible paths41
ch += max(max(hh, vh), max(vv, hv));48
int cherryPickup(vector<vector<int>> &grid) {51
vector<vector<vector<int>>> dp(n, vector<vector<int>>(n, vector<int>(n, -1)));53
int ans = solve(0, 0, 0, grid, dp);55
if (ans == INT_MIN || ans < 0) {