在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