#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。