https://leetcode-cn.com/problems/jump-game-vi/submissions/
分析
dp[i]表示跳跃到第i位时的最大得分,则转移方程为 dp[i]= (从dp[i-k]到dp[i-1]的最大值) +nums[i],采取单调队列维护区间最大值。
class Solution {
public:
int dp[100010]={0},q[100010]={0};
int maxResult(vector<int>& nums, int k) {
dp[0]=nums[0];
int ln=nums.size(),l=0,r=0;
for(int i=1;i<ln;i++)
{
if(q[l]<i-k)l++;
while(r>=l&&dp[i-1]>=dp[q[r]])r--;
q[++r]=i-1;
dp[i]=dp[q[l]]+nums[i];
}
return dp[ln-1];
}
};