在Python中找到砖块清除游戏的最高得分的程序

在Python中找到砖块清除游戏的最高得分的程序

假设Amal和Bimal正在玩游戏。他们有一个确定了n个砖头以及砖头上编号的数组nums。在这个游戏中,玩家可以轮流从顶部删除一个、两个或三个砖块,所取得的分数标记在已去除的那个玩家身上。如果总是由 Amal 开始,我们必须找到 Amal 可以安全获得的最高得分是多少。

因此,如果输入是 nums=[1,2,3,4,5],那么输出将为6,因为如果Amal选择第一个、前两个或前三个元素,那么Bimal可以全部取走并得到最高分,但如果Amal首先选择1,则Bimal最多可以取走{2,3,4}=9,而Amal可以取走5,则Amal的总分式1+5=6。

要解决这个问题,我们将遵循以下步骤:

  • INF:=9999
  • n:=nums的大小
  • 颠倒nums列表
  • temp:=大小为n的数组并填充为0
  • 总:=大小为n的数组并填充为0
  • 对于nums中的每个索引i和值val,执行以下操作:
    • total [i]:=total [i-1]+val
  • temp [0]:= nums [0]
  • temp [1]:= temp [0]+ nums [1]
  • temp [2]: = temp [1] + nums [2]
  • 对于范围在3到n-1的i,执行以下操作:
    • a:= nums[i]
    • b:= nums[i]+nums[i-1]
    • c:= nums[i] + nums[i-1] + nums[i-2]
    • temp [i]: = a, b, c中的最大值
  • 返回temp [n-1]

示例

让我们看一下以下实现,以获得更好的理解−

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程