#2657. 奶牛的跳格子游戏

奶牛的跳格子游戏

题目描述

奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N\red{N}个格子,(3<=N<=250,000)\red{(3 <=N <= 250,000),}编号为1..N\red{1..N}。就像任何一个好游戏一样,这样的跳格子游戏也有奖励!第i\red{i}个格子标有一个数字Vi(2,000,000,000<=Vi<=2,000,000,000)\red{V_i(-2,000,000,000 <=V_i <= 2,000,000,000)}表示这个格子的钱。奶牛们想看看最后谁能得到最多的钱。

规则很简单:

每个奶牛从0\red{0}号格子出发。(0\red{0}号格子在1\red{1}号之前,那里没钱)

她向N\red{N}号格子进行一系列的跳跃(也可以不跳),每次她跳到的格子最多可以和前一 个落脚的格子差K\red{K}(1<=K<=N)\red{(1 <= K <= N)}(比方说,当前在1\red{1}号格,K=2,\red{K=2, }可以跳到2\red{2}号和3\red{3}号格子)

在任何时候,她都可以选择回头往0\red{0}号格子跳,直到跳到0\red{0}号格子。另外,除了以上规则之外,回头跳的时候还有两条规则:

不可以跳到之前停留的格子。

除了0\red{0}号格子之外,她在回来的时候,停留的格子必须是恰巧过去的时候停留的某个格子的前一格(当然,也可以跳过某些过去时候停留的格子)。

简单点说,如果i\red{i}号格子是回来 停留的格子,i+1\red{i+1}号就必须是过去停留的格子,如果i+1\red{i+1}号格子是过去停留的格子,i\red{i}号格子不一定要是回来停留的格子。(如果这里不太清楚的可以去看英文原文)她得到的钱就是所有停留过的格子中的数字的和,请你求出最多奶牛可以得到的钱数。 在样例中,K=2\red{K=2 ,}一行5\red{5}个格子。

img

一个合法的序列Bessie\red{Bessie}可以选择的是0[0],1[0],3[2],2[1],0[0]\red{0[0], 1[0], 3[2], 2[1], 0[0]}。(括号里的数表示钱数)这样,可以得到的钱数为0+0+2+1+0=3\red{0+0+2+1+0 = 3}

如果Bessie\red{Bessie}选择一个序列开头为0,1,2,3,...\red{0, 1, 2, 3, ...,}那么她就没办法跳回去了,因为她没办法再跳到一个之前没跳过的格子。

序列0[0],2[1],4[3],5[4],3[2],1[0],0[0]\red{0[0], 2[1], 4[-3], 5[4], 3[2], 1[0], 0[0]}是最大化钱数的序列之一,最后的钱数为(0+13+4+2+0=4)\red{(0+1-3+4+2+0 = 4)}

输入格式

1\red{1}1:\red{1: }两个用空格隔开的整数: N\red{N }K\red{K }

2\red{2}N+1\red{N+1}行: 第i+1\red{i+1}行有一个整数: Vi\red{V_i}

输出格式

第一行: 一个单个的整数表示最大的钱数是多少。

样例

输入样例

5 2
0
1
2
-3
4

输出样例

4

提示

还有一种可能的最大化钱数的序列是: 0245310\red{0 2 4 5 3 1 0}