在Python中检查人1的程序可以通过取得最大分数来赢得糖果游戏

假设有两个玩家在玩游戏。在一条线上放置了多个糖果的情况下,第1人将获得一个称为nums的数字列表,该数字表示每个糖果的点值。轮到每个人时,他们可以从线的前面选择1,2个或3个糖果,然后从列表中将其删除,然后将其总分加到分数中。删除所有糖果后,这场比赛将结束,得分更高的人将成为赢家。我们必须检查第1人是否可以赢得这场比赛。

因此,如果输入类似于nums = [1、1、2、3、50],那么输出将为True,因为人1可以吃1糖果,而其他玩家则必须吃1、2或3个糖果。在任何情况下,人1都可以取值为50的糖果。

为了解决这个问题,我们将遵循以下步骤-

  • n:= nums的大小

  • table:=具有三个0的数组。

  • 对于范围n − 1至0的i,减1,

    • sum_val:= sum_val +数字[j]

    • 利润:=利润的最大值和(sum_val − table [j − i])

    • 利润:= -inf

    • sum_val:= 0

    • 对于范围i到最小i + 3和n的j,执行

    • 设置表:=具有三个值的列表[profit,table [0],table [1]]

    • 当table [0]> 0时返回true,否则返回false

    让我们看下面的实现以更好地理解-

    示例

    import math
    class Solution:
       def solve(self, nums):
          n = len(nums)
          table = [0, 0, 0]
          for i in range(n − 1, −1, −1):
             profit = −math.inf
             sum_val = 0
             for j in range(i, min(i + 3, n)):
                sum_val += nums[j]
                profit = max(profit, sum_val − table[j − i])
             table[:] = [profit, table[0], table[1]]
          return table[0] > 0
    ob = Solution()
    nums = [1, 1, 2, 3, 50]
    print(ob.solve(nums))

    输入值

    [1, 1, 2, 3, 50]
    输出结果
    True

    猜你喜欢