在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