forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCherry Pickup II.cpp
38 lines (36 loc) · 1.4 KB
/
Cherry Pickup II.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Runtime: 461 ms (Top 6.78%) | Memory: 16.8 MB (Top 51.89%)
class Solution {
public:
int cherryPickup(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
vector<vector<vector<int>>> dp(n,vector<vector<int>>(m,vector<int>(m, 0)));
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < m ; j++){
if(i==j) dp[n-1][i][j] = grid[n-1][i];
else dp[n-1][i][j] = grid[n-1][i] + grid[n-1][j];
}
}
for(int i = n-2 ; i >= 0 ; i--){
for(int j1 = 0 ; j1 < m ; j1++){
for(int j2 = 0 ; j2 < m ; j2++){
int maxi = -1e8;
for(int dj1 = -1 ; dj1 <= 1 ; dj1 ++){
for(int dj2 = -1 ; dj2 <= 1 ; dj2 ++){
int value = 0;
if(j1 == j2) value = grid[i][j2];
else value = grid[i][j1] + grid[i][j2];
if(j1+dj1 >= 0 && j1+dj1 < m && j2 +dj2 >= 0 && j2 +dj2 < m)
value += dp[i+1][j1+dj1][j2 +dj2];
else
value+= -1e8;
maxi = max(maxi,value);
}
}
dp[i][j1][j2] = maxi;
}
}
}
return dp[0][0][m-1];
}
};