forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.java
31 lines (31 loc) · 1.17 KB
/
Solution.java
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
class Solution {
public int cherryPickup(int[][] grid) {
int n = grid.length;
int[][][] f = new int[n * 2][n][n];
f[0][0][0] = grid[0][0];
for (int k = 1; k < n * 2 - 1; ++k) {
for (int i1 = 0; i1 < n; ++i1) {
for (int i2 = 0; i2 < n; ++i2) {
int j1 = k - i1, j2 = k - i2;
f[k][i1][i2] = Integer.MIN_VALUE;
if (j1 < 0 || j1 >= n || j2 < 0 || j2 >= n || grid[i1][j1] == -1
|| grid[i2][j2] == -1) {
continue;
}
int t = grid[i1][j1];
if (i1 != i2) {
t += grid[i2][j2];
}
for (int x1 = i1 - 1; x1 <= i1; ++x1) {
for (int x2 = i2 - 1; x2 <= i2; ++x2) {
if (x1 >= 0 && x2 >= 0) {
f[k][i1][i2] = Math.max(f[k][i1][i2], f[k - 1][x1][x2] + t);
}
}
}
}
}
}
return Math.max(0, f[n * 2 - 2][n - 1][n - 1]);
}
}