1
/**
2
* @param {number[]} piles
3
* @return {number}
4
*/
5
var stoneGameII = function (piles) {
6
let sum = 0;
7
const dp = new Array(101).fill(0).map(() => new Array(201).fill(0));
8
for (let i = 0; i < piles.length; i++) {
9
sum += piles[i];
10
}
11
let diff = help(0, 1, piles, dp);
12
return (sum + diff) / 2;
13
};
14

15
function help(i, M, piles, dp) {
16
if (i >= piles.length) return 0;
17
if (dp[i][M] != 0) return dp[i][M];
18
let total = 0;
19
let ans = Number.MIN_SAFE_INTEGER;
20
for (let j = 0; j < 2 * M; j++) {
21
if (i + j < piles.length) total += piles[i + j];
22
ans = Math.max(ans, total - help(i + j + 1, Math.max(M, j + 1), piles, dp));
23
}
24
dp[i][M] = ans;
25
return ans;
26
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0