Skip to content

Commit c5d45d8

Browse files
authored
Create 3276-select-cells-in-grid-with-maximum-score.js
1 parent 99536f2 commit c5d45d8

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number}
4+
*/
5+
var maxScore = function (grid) {
6+
const n = grid.length
7+
const m = grid[0].length
8+
const values = []
9+
10+
for (let i = 0; i < n; i++) {
11+
for (let j = 0; j < m; j++) {
12+
values.push([grid[i][j], i, j])
13+
}
14+
}
15+
16+
values.sort((a, b) => b[0] - a[0])
17+
const dp = {}
18+
19+
return recur(values, 0, 0, dp)
20+
}
21+
22+
function recur(values, idx, mask_row, dp) {
23+
const n = values.length
24+
if (idx === n) return 0
25+
26+
const key = `${idx},${mask_row}`
27+
if (key in dp) return dp[key]
28+
29+
let ans = 0
30+
const row = values[idx][1]
31+
if ((1 << row) & mask_row) {
32+
ans += recur(values, idx + 1, mask_row, dp)
33+
} else {
34+
let j = idx
35+
while (j < n && values[idx][0] === values[j][0]) j++
36+
37+
const ans1 = values[idx][0] + recur(values, j, mask_row | (1 << row), dp)
38+
const ans2 = recur(values, idx + 1, mask_row, dp)
39+
40+
ans = Math.max(ans1, ans2)
41+
}
42+
43+
dp[key] = ans
44+
return ans
45+
}

0 commit comments

Comments
 (0)