题目描述
一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀。愤怒的lw决定买BKB,来加强生存力。
由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1毫秒的时间间隔连续放n个技能,第i个技能造成ki点伤害。如果某个技能没有成功放出来,他也不会试图再次释放该技能。已知lw的BKB可以为他提供t毫秒的魔免时间(即,能抵挡连续的t个技能),那么BKB至多能降低多少伤害呢?
输入
多组数据(不超过10组)。
每组数据,第一行2个整数n、t,第二行n个整数k1,k2,...,kn,用空格分割。
数据保证1<=n<=100000,1<=t<=10000,0<=ki<=1000。
输出
输出1行,一个整数,表示BKB能避免的最大伤害。
样例输入
5 3
1 2 3 4 5
样例输出
12
提示
对于样例,最优策略显然是用BKB抵挡掉后3个技能。
思路:求连续k子段最大和,每次移动一格即可,注意t>n的情况即可
代码:
const int maxm = 100002; int buf[maxm]; int main() { int n, t; while(scanf("%d%d", &n, &t) != EOF) { int ans = 0, tmp = 0; for (int i = 0; i < n; ++i) { scanf("%d", &buf[i]); if (i < t) tmp += buf[i]; } int l = 0, r = t; ans = tmp; while(r < n) { tmp += buf[r++], tmp -= buf[l++]; ans = max(tmp, ans); } printf("%d\n", ans); } return 0; }