DP over (c1, c2) per row
Time O(rows × cols² × 9) Space O(cols²)dp[c1][c2] = best total with robots at those columns in the current row (−1 = unreachable). For each next row, try all 9 predecessor pairs.
import java.util.Arrays;
class Solution {
public int cherryPickup(int[][] grid) {
int rows = grid.length, n = grid[0].length;
int[][] dp = new int[n][n];
for (int[] row : dp) Arrays.fill(row, -1);
dp[0][n - 1] = grid[0][0] + grid[0][n - 1];
for (int r = 1; r < rows; r++) {
int[][] next = new int[n][n];
for (int[] row : next) Arrays.fill(row, -1);
for (int a = 0; a < n; a++)
for (int b = 0; b < n; b++) {
int best = -1;
for (int da = -1; da <= 1; da++)
for (int db = -1; db <= 1; db++) {
int pa = a + da, pb = b + db;
if (pa < 0 || pb < 0 || pa >= n || pb >= n) continue;
best = Math.max(best, dp[pa][pb]);
}
if (best < 0) continue;
next[a][b] = best + grid[r][a] + (a == b ? 0 : grid[r][b]);
}
dp = next;
}
int ans = 0;
for (int[] row : dp) for (int x : row) ans = Math.max(ans, x);
return ans;
}
}Verdict: Small state, many transitions.