DP problems on the grid

1463. Cherry Pickup II

Jimmy (xiaoke) Shen
1 min readJul 13, 2020

C++ code[1]

class Solution {
public:
int cherryPickup(vector<vector<int>>& grid) {
int R= grid.size(), C = grid[0].size();
vector<vector<int>> dp(C, vector<int>(C, INT_MIN));
dp[0][C-1] = grid[0][0] + grid[0][C-1];
for (int r =1;r<R;++r)
{
vector<vector<int>> dp_new(C, vector<int>(C, INT_MIN));
for (int i=0;i<C;++i)
for (int j=0; j<C;++j)
{
for(int a = i-1; a<=i+1;++a)
for(int b = j-1;b<=j+1;++b)
{
if(a<0 or a>=C or b<0 or b>=C)continue;
dp_new[i][j] = max(dp_new[i][j], dp[a][b]+grid[r][i]+(i==j?0:grid[r][j]));
}
}
dp = dp_new;
}
int ret = INT_MIN;
for(int i=0;i<C;++i)
for(int j=0;j<C;++j)
ret = max(ret, dp[i][j]);
return ret;
}
};

Reference

[1]https://youtu.be/2iuqobSv9NU

--

--