You are given a 0-indexed integer array nums and an integer k.
You are initially standing at index 0. In one move, you can jump at most k steps forward without going outside the boundaries of the array. That is, you can jump from index i to any index in the range [i + 1, min(n - 1, i + k)]inclusive.
You want to reach the last index of the array (index n - 1). Your score is the sum of all nums[j] for each index j you visited in the array.
Return the maximum score you can get.
Example 1:
Input: nums = [1,-1,-2,4,-7,3], k = 2
Output: 7
Explanation: You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7.
Example 2:
Input: nums = [10,-5,-2,4,0,3], k = 3
Output: 17
Explanation: You can choose your jumps forming the subsequence [10,4,3] (underlined above). The sum is 17.
Example 3:
Input: nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
Output: 0
We define \(f[i]\) as the maximum score when reaching index \(i\). The value of \(f[i]\) can be transferred from \(f[j]\), where \(j\) satisfies \(i - k \leq j \leq i - 1\). Therefore, we can use dynamic programming to solve this problem.
We can use a monotonic queue to optimize the state transition equation. Specifically, we maintain a monotonically decreasing queue, which stores the index \(j\), and the \(f[j]\) values corresponding to the indices in the queue are monotonically decreasing. When performing state transition, we only need to take out the index \(j\) at the front of the queue to get the maximum value of \(f[j]\), and then update the value of \(f[i]\) to \(f[j] + nums[i]\).
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array.