【发布时间】:2019-10-30 14:20:47
【问题描述】:
游戏总结游戏 - 有偶数堆石头,2名玩家交替捡起一堆。石头的总和总是奇数,因此不可能平局。我们需要检查首先开始的玩家是否赢得了比赛。
我对以下代码有疑问,该代码运行良好 此代码检查 Play A(谁先出)是否赢得比赛 下面的代码计算(A捡到的石头总和-B捡到的石头总和)
问题是 - 代码 (在代码 if(parity == 0)) 下如何计算总和。 我了解涉及动态编程/递归,但是由于递归调用中没有传递总和 - 如何计算总和?
def stoneGame(self, piles:List[int]) -> bool :
N = len(piles)
@lru_cache(maxsize=None)
def dp(i, j):
if(i > j):
return 0
parity = (j - i +1) %2
if(parity == 0):
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
【问题讨论】:
标签: python-3.x recursion dynamic-programming