【华为OD】跳格子3

题目描述

小明和朋友们一起玩跳格子游戏,

每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7],

从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。

https://www.nowcoder.com/discuss/617127440694927360

解法

动态规划+大顶堆


from queue import PriorityQueue

arr = [1, -1, -6, 7, -17, 7]
dp = [0, 0, 0, 0, 0, 0]
k = 2

q= PriorityQueue()

for i in range(len(arr)):
    maxnum = 0 if q.empty() else -q.queue[0]
    dp[i] = arr[i] + maxnum
    q.put(-dp[i])
    if i-k>=0:
        q.queue.remove(-dp[i-2])


print(dp)

posted @ 2024-10-09 19:07  莫大师兄  阅读(121)  评论(0)    收藏  举报