寻找我们可以在 Python 跳跃游戏中获得的最高分数的程序

假设我们有一个名为 nums 的数组和另一个值 k。我们在索引 0 处。在一次移动中,我们最多可以向右跳 k 步,而不会超出数组的边界。我们想要到达数组的最终索引。对于跳跃,我们得到分数,即我们在数组中访问的每个索引 j 的所有 nums[j] 的总和。我们必须找到我们能得到的最高分。

所以,如果输入像 nums = [1,-2,-5,7,-6,4] k = 2,那么输出将是 10,因为,我们按照这个序列 [1, -2, 7, 4],那么我们将得到最大点,即 10。

示例

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

def solve(nums, k):
   n = len(nums)
   scores = [0] * n
   scores[0] = nums[0]
   currMax = scores[0]
   max_pt = 0

   if n < 1:
      return 0
   if n == 1:
      return nums[-1]

   for idx in range(1,n):
      if max_pt >= idx - k:
         if currMax < scores[idx-1] and idx > 0:
            currMax = scores[idx-1]
            max_pt = idx-1
      else:
         if idx - k > 0:
            currMax = scores[idx-k]
            max_pt = idx - k
            for p in range(idx-k, idx):
               if scores[p] >= currMax:
                  max_pt = p
                  currMax = scores[p]
      scores[idx] = currMax + nums[idx]
   scores[-1] = currMax + nums[-1]
   return scores[-1]

nums = [1,-2,-5,7,-6,4]
k = 2
print(solve(nums, k))

输入

[1,-2,-5,7,-6,4], 2
输出结果
10