用 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