LeetCode 1140. Stone Game II解题报告(python)
1140. Stone Game II
- Stone Game II python solution
题目描述
Alex and Lee continue their games with piles of stones. There are a number of piles arranged in a row, and each pile has a positive integer number of stones piles[i]. The objective of the game is to end with the most stones.
Alex and Lee take turns, with Alex starting first. Initially, M = 1.
On each player’s turn, that player can take all the stones in the first X remaining piles, where 1 <= X <= 2M. Then, we set M = max(M, X).
The game continues until all the stones have been taken.
Assuming Alex and Lee play optimally, return the maximum number of stones Alex can get.
解析
使用动态规划,使用A[i]表示piles[i:]中以[1,2*M]为取值范围可以取的最多石子数
动态规划的方程如下所示
f(i,m)=A[i]−min(f(i+x,max(M,x)))
f(i,m) = A[i]-min(f(i+x,max(M,x)))
f(i,m)=A[i]−min(f(i+x,max(M,x)))
如果想让亚历克斯拿的尽可能多,那么我们就应该让李少拿。亚历克斯拿到最多的石子个数是,整体的石子个数减去李拿最少的石子,即min(f(i+x,max(M, x)))。
from functools import lru_cache class Solution: def stoneGameII(self, A: List[int]) -> int: N = len(A) for i in range(N - 2, -1, -1): A[i] += A[i + 1] from functools import lru_cache @lru_cache(None) def dp(i, m): if i + 2 * m >= N: return A[i] return A[i] - min(dp(i + x, max(m, x)) for x in range(1, 2 * m + 1)) return dp(0, 1)
Reference
https://leetcode.com/problems/stone-game-ii/discuss/345230/Python-DP-Solution
https://blog.csdn.net/qq_17550379/article/details/97757641
- 点赞
- 收藏
- 分享
- 文章举报
- leetcode解题报告:45. Jump Game II
- 【LeetCode】672. Bulb Switcher II 解题报告(Python)
- 【LeetCode】462. Minimum Moves to Equal Array Elements II 解题报告(Python)
- [leetcode] 294. Flip Game II 解题报告
- [Leetcode] 294. Flip Game II 解题报告
- LeetCode 227. Basic Calculator II 解题报告【python】
- 【LeetCode】Jump Game II 解题报告
- Leetcode Jump Game II 解题报告
- [LeetCode] Remove Duplicates from Sorted Array II 解题报告
- [leetcode] 213. House Robber II 解题报告
- Leetcode 486 python 解题报告
- 【LeetCode】Hamming Distance 解题报告(java & python)
- LeetCode-House Robber II-解题报告
- leetcode 375. Guess Number Higher or Lower II 解题报告
- 【LeetCode】598. Range Addition II 解题报告(Python)
- LeetCode 1090. Largest Values From Labels解题报告(python)
- LeetCode 1249. Minimum Remove to Make Valid Parentheses解题报告(python)
- leetCode解题报告之SingleNumberI,II(知识点:位运算)
- 【LeetCode】783. Minimum Distance Between BST Nodes 解题报告(Python)
- [Leetcode] 679. 24 Game 解题报告