#996. 睡觉 (sleep.cpp)

睡觉 (sleep.cpp)

Background

Special for beginners, ^_^

Description

小C 经常熬夜学习,加上最近半夜老是被蛐蛐们吵醒,所以她非常缺觉。

小C 的一天被平均分割成 N 段(3≤N≤4000),但是小C 必须睡够 B 段时间的觉(2≤B<N)。每段时间都有一个效用值Ui(0≤Ui≤2×10​^5^​),只有当小C 睡觉的时候,才会发挥效用。

有了闹钟的帮助,小C 可以选择任意的时间入睡,当然,小C 只能在时间划分的边界处入睡、醒来。

小C 想使所有睡觉效用的总和最大。不幸的是,每一段睡眠的第一个时间阶段都是“入睡”阶段,而旦不记入效用值。

需要注意的是,时间阶段是不断循环(一天又一天......)。也就是说,假如小C 在时间 N 和时间 1 睡觉,那么小C 将得到时间 1 的效用值。

Format

Input

第一行两个整数N,B。

接下来 N 行,每行一个整数,表示第 i个时段的效用值。

Output

输出最大效用值。

Samples

5 3
2
0
3
1
4
6

【样例1说明】

从第 4个时段入睡,到第 1 个时段结束醒来。

20 8
0
5
0
5
0
5
0
3
3
3
3
3
3
3
0
5
0
5
0
5
21

Limitation

提示︰本题输入规模较大,请避免使用过慢的输入方式。

对于 60% 的数据:3≤B<N≤20,0≤Ui≤2×10​^5​;

对于100% 的数据:3≤B<N≤4000,0≤Ui≤2×10​^5​。