leetcode

Solution to some Leetcode problems written in C++
git clone git://git.dimitrijedobrota.com/leetcode.git
Log | Files | Refs | README | LICENSE

1463.cpp (920B)


0 class Solution {
1 static int dp[70][70][70];
3 static int dfs(const vector<vector<int>> &grid, int r, int c1, int c2) {
4 const int n = size(grid), m = size(grid[0]);
6 if (r == n) return 0;
7 if (dp[r][c1][c2] != -1) return dp[r][c1][c2];
9 int res = 0;
10 for (int i = -1; i <= 1; i++) {
11 for (int j = -1; j <= 1; j++) {
12 const int nc1 = c1 + i, nc2 = c2 + j;
13 if (nc1 < 0 || nc1 >= m || nc2 < 0 || nc2 >= m) continue;
14 res = max(res, dfs(grid, r + 1, nc1, nc2));
15 }
16 }
18 const int cherries = c1 == c2 ? grid[r][c1] : grid[r][c1] + grid[r][c2];
19 return dp[r][c1][c2] = res + cherries;
20 }
22 public:
23 int cherryPickup(const vector<vector<int>> &grid) const {
24 memset(dp, 0xFF, sizeof(dp));
25 return dfs(grid, 0, 0, size(grid[0]) - 1);
26 }
27 };
29 int Solution::dp[70][70][70];