用 Python 求取砖游戏最高分的程序

假设 Amal 和 Bimal 正在玩游戏。他们有一个数组 nums ,它确定 n 个砖块,上面有编号。在这个游戏中,玩家可以交替地从顶部取出一块、两块或三块积木,取下的积木上标记的数字会加到该玩家的分数上。如果 Amal 总是先开始,我们必须找到 Amal 最多获得多少分数。

因此,如果输入类似于 nums = [1,2,3,4,5],那么输出将为 6,因为 Amal 可以移除砖块 {1}、{1,2} 或 {1,2,3} , 如果 Amal 选择前两个或三个元素,则 Bimal 可以取所有并获得最大分数,但如果 Amal 最初选择 1,则 Bimal 最多可以取 {2,3,4} = 9,Amal 可以取 5,所以总计Amal 的分数是 1+5 = 6。

示例

让我们看看以下实现以获得更好的理解 -

INF = 99999
def solve(nums):
   n = len(nums)
   nums.reverse()
   temp = [0]*n
   total = [0]*n
   for i, val in enumerate(nums):
      total[i] = total[i-1] + val
   temp[0] = nums[0]
   temp[1] = temp[0]+nums[1]
   temp[2] = temp[1]+nums[2]
   for i in range(3, n):
      a = nums[i]
      b = nums[i] + nums[i-1]
      c = nums[i] + nums[i-1] + nums[i-2]
      temp[i] = max(a, b, c)
   return temp[n-1]

nums = [1,2,3,4,5]
print(solve(nums))

输入

[1,2,3,4,5]
输出结果
6