第三十六天(极小化极大)
# 高阶函数 from functools import lru_cache class Solution: def stoneGame(self, piles): N = len(piles) # last recently unused,缓存,None表示无限制 @lru_cache(None) def dp(i, j): # The value of the game [piles[i], piles[i+1], ..., piles[j]]. if i > j: return 0 parity = (j - i) % 2 # 判断是否是亚历克斯(先手) if parity == 1: # first player return max(piles[i] + dp(i+1,j), piles[j] + dp(i,j-1)) # 越大,越能获胜 else: return min(-piles[i] + dp(i+1,j), -piles[j] + dp(i,j-1)) # 越小,越能减少对手获得的分数 return dp(0, N - 1) > 0
最后更新于