Skip to content

Commit

Permalink
【877.石子游戏【Python】
Browse files Browse the repository at this point in the history
  • Loading branch information
hzs authored and labuladong committed Nov 11, 2020
1 parent 8b8f413 commit 97e5e1d
Showing 1 changed file with 54 additions and 1 deletion.
55 changes: 54 additions & 1 deletion 动态规划系列/动态规划之博弈问题.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,4 +215,57 @@ int stoneGame(int[] piles) {
<img src="../pictures/qrcode.jpg" width=200 >
</p>

======其他语言代码======
======其他语言代码======





python3版本

由[SCUHZS](https://github.com/brucecat)提供

这里采取的是三维的做法

```python
class Solution:
def stoneGame(self, piles: List[int]) -> bool:
n = len(piles)

# 初始化一个n*n的矩阵 dp数组
dp = [[None] * n for i in range(0, n)]

# 在三角区域填充
for i in range(n):
for j in range(i, n):
dp[i][j] = [0, 0]

# 填入base case
for i in range(0, n):
dp[i][i][0] = piles[i]
dp[i][i][1] = 0

# 斜着遍历数组
for l in range(2, n + 1):
for i in range(0, n-l+1):
j = l + i - 1


# 先手选择最左边或最右边的分数
left = piles[i] + dp[i + 1][j][1]
right = piles[j] + dp[i][j - 1][1]

# 套用状态转移方程
if left > right:
dp[i][j][0] = left
dp[i][j][1] = dp[i + 1][j][0]
else:
dp[i][j][0] = right
dp[i][j][1] = dp[i][j - 1][0]

res = dp[0][n - 1]

return res[0] - res[1] > 0

```

0 comments on commit 97e5e1d

Please sign in to comment.