题目解析
假设第 i 个格子的最大得分为 dp[i],那么存在如下递推公式:
dp[i] = max(dp[i-k], dp[i-k+1], ...., dp[i-2], dp[i-1]) + score[i]
可以发现,dp[i]的状态取决于 dp数组的 i-k ~ i-1 范围内的最大值状态。即第 i 个格子想要最大得分,可以从第 i-k 到 第 i-1 个格子中选择一个最大得分的格子起跳。
因此本题难点就变成了:求一个数组的任意长度为k的子区间内的最大值。
高效的求解办法是利用单调队列,具体可以看: