【问题标题】:Stone Game (leetcode 877) - how is the sum getting calculatedStone Game (leetcode 877) - 总和是如何计算的
【发布时间】: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


    【解决方案1】:

    让我们看看 piles[i] + dp(i+1, j) 和奇偶校验 0。

    下一个计算将是 piles[i] - Piles[i+1] + dp(i+2,j)piles[i] - Piles[j] + dp( i+1,j -1)

    因此,您可以根据条件观察桩数组是如何增加或减少的。

    在基本情况 (i > j) 下,计算如下:

    桩[x1] - 桩[x2] + 桩[x3] - 桩[x4] + ......

    其中 x1,x2,x3,x4 是数组的不同索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多