Leetcode 1240 Solution

This article provides solution to leetcode question 1240 (stone-game-ii)

https://leetcode.com/problems/stone-game-ii

Solution

class Solution: def stoneGameII(self, piles: List[int]) -> int: cache = {}
def play(piles, s, i, M): if i == len(piles): return 0
key = (i, M) if key in cache: return cache[key]
start_pile = i end_pile = i
options = []
pile_sum = 0 while end_pile < len(piles) and end_pile - start_pile + 1 <= 2 * M: pile_sum += piles[end_pile] s -= piles[end_pile]
opponent_opt = play(piles, s, end_pile + 1, max(end_pile - start_pile + 1, M))
options.append(pile_sum + s - opponent_opt)
end_pile += 1
cache[key] = max(options) return cache[key]
return play(piles, sum(piles), 0, 1)