#P2053. 【数据结构】【单调队列】打保龄球

【数据结构】【单调队列】打保龄球

问题说明

有n个球瓶等距排成一排,从左到右的编号分别为 1,2,...,n。每个球瓶都有一个分值(可能为负数),第i个球瓶的分值为ai。
给你K个保龄球,每个球的直径为w。也就是说,每个球可以击倒一个长度为w的区间内的所有球瓶。当然,每个球只能投出一次。
每当用球击倒一个球瓶,他就会得到相应的分值,在某个球瓶被击倒后,球瓶原来的位置会留出空位。另外,球瓶1的左边、球瓶n的右边都有足够的空位。
投出的保龄球可以经过空位,空位上原有的球瓶失效,即不会得到相应的分值。当然,保龄球可以不击倒任何球瓶()。
想知道,你投完所有保龄球后,你最多可以得到多少分?

输入格式

共两行。

第一行3个正整数n,k,分别表示球瓶数量、球的数量、球的直径。

第二行n个整数a1,a2,...,an,表示每个球瓶的分值。

输出格式

一行一个整数,表示能得到的最大的分值。

 对于100%数据,1<=n<=10000,1<=k<=500  |ai|<=1000

9 3 3
2 8 -5 3 5 8 4 8 -6
38

来源/分类

数据结构