class Solution:
def stoneGameIII(self, stoneValue: List[int]) -> str:
n = len(stoneValue)
@cache
def maxDiff(i: int, n: int) -> int:
if i == n - 1:
return stoneValue[i]
val1, val2, val3 = float(-inf), float(-inf), float(-inf)
val1 = stoneValue[i] - maxDiff(i + 1, n)
if n - i >= 2:
val2 = stoneValue[i] + stoneValue[i + 1] - maxDiff(i + 2, n) if n - i > 2 else stoneValue[i] + stoneValue[i + 1]
if n - i >= 3:
val3 = stoneValue[i] + stoneValue[i + 1] + stoneValue[i + 2] - maxDiff(i + 3, n) if n - i > 3 else stoneValue[i] + stoneValue[i + 1] + stoneValue[i + 2]
return max(val1, val2, val3)
diff = maxDiff(0, n)
if diff > 0:
return "Alice"
elif diff < 0:
return "Bob"
else:
return "Tie"