单调队列可以保持前k个dp中的最大值
class Solution {
public:
int maxResult(vector<int>& nums, int k) {
int n=nums.size();
deque<int>dq;
vector<int>dp(n,0);
dp[0]=nums[0];
dq.emplace_back(0);
for(int i=1;i<n;++i){
while(!dq.empty() && i-dq.front()>k)
dq.pop_front();
dp[i]=dp[dq.front()]+nums[i];
while(!dq.empty() && dp[i]>=dp[dq.back()])
dq.pop_back();
dq.emplace_back(i);
}
return dp[n-1];
}
};