Cherry Pickup II
HardArrayDynamic ProgrammingMatrix
Solution
export function cherryPickup(grid: number[][]): number {
const [m, n] = [grid.length, grid[0].length];
const memo = Array.from({ length: m }, () =>
Array.from({ length: n }, () => new Array<number>(n).fill(-1)),
);
function dfs(r: number, c1: number, c2: number): number {
if (r === m) {
return 0;
}
if (memo[r][c1][c2] !== -1) {
return memo[r][c1][c2];
}
const cherries = c1 === c2 ? grid[r][c1] : grid[r][c1] + grid[r][c2];
let result = 0;
for (let nc1 = c1 - 1; nc1 <= c1 + 1; nc1++) {
for (let nc2 = c2 - 1; nc2 <= c2 + 1; nc2++) {
if (nc1 >= 0 && nc1 < n && nc2 >= 0 && nc2 < n) {
result = Math.max(result, dfs(r + 1, nc1, nc2));
}
}
}
memo[r][c1][c2] = cherries + result;
return memo[r][c1][c2];
}
return dfs(0, 0, n - 1);
}