【leetcode1696】跳跃游戏

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];
    }
};
上一篇:【Codeforce 746 C】Bakry and Partitioning


下一篇:5683 道路拆除