아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

숫자 볼링++

시간 제한1초메모리 제한128 MB

요약
길이 w인 창을 최대 k개 선택해 덮인 핀들의 합이 최대가 되도록 만든다. 창은 행 양 끝을 넘어가도 된다.
난이도

보통10점 중 7점

유형
동적 계획법, 누적 합, 배열, 그리디
정답자
아직 제출이 없습니다

문제

'숫자 볼링(Bowling for Numbers)'이라는 게임을 한다. 볼링 핀 nn개가 한 줄로 서 있고, ii번째 핀에는 정수 점수 aia_i가 적혀 있다. 이는 그 핀을 쓰러뜨렸을 때 얻는 점수다. 일부 핀은 점수가 음수인 벌점 핀이라서, 쓰러뜨리면 오히려 총점이 깎인다.

당신에게는 볼링공 kk개가 주어진다. 각 공은 연속한 핀을 최대 ww개까지 쓰러뜨릴 만큼 넓다. 즉 한 번 던지면 인접한 ww개 위치로 이루어진 구간을 덮고, 그 구간 안에 아직 서 있는 핀을 모두 쓰러뜨린다. 한 핀의 점수는 공이 몇 개 지나가든 최대 한 번만 계산된다.

던진 공의 구간은 줄의 왼쪽이나 오른쪽 끝을 넘어갈 수 있고(끝 바깥은 모두 빈 공간이다), 앞서 던진 공이 이미 쓰러뜨려 생긴 빈틈을 지나갈 수도 있다. 이를 이용할 수 있다. 구간의 ww개 위치 중 일부가 빈 공간(줄의 바깥이거나 이전 투구로 이미 치워진 위치)에 놓이도록 겨냥하면, ww개보다 적게 쓰러뜨리면서 벌점 핀을 피할 수 있다. 아무 핀도 쓰러뜨리지 않도록 공을 던져도 된다.

kk개의 공을 던져 쓰러뜨린 핀들의 총점을 최대로 만들어라. 모든 공을 반드시 쓸 필요는 없다.

이는 다음과 동치다. 쓰러지는 핀은 당신이 던진 (최대 kk개의) 길이 ww짜리 구간 중 적어도 하나에 덮이는 위치의 핀이고, 점수는 덮인 모든 위치의 aia_i의 합이다. 얻을 수 있는 최대 점수를 구하라.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤101 \le t \le 10)가 주어진다. 이어서 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에는 세 정수 nn, kk, ww가 주어진다.

  • nn (1≤n≤100001 \le n \le 10000) — 핀의 개수
  • kk (1≤k≤5001 \le k \le 500) — 공의 개수
  • ww (1≤w≤1001 \le w \le 100) — 공의 너비, 즉 한 번 던져 쓰러뜨릴 수 있는 연속한 핀의 최대 개수

다음 nn개의 줄에는 각각 정수가 하나씩 주어지며, 왼쪽부터 순서대로 각 핀의 점수를 나타낸다. 모든 점수는 −10000≤ai≤10000-10000 \le a_i \le 10000을 만족한다.

출력

각 테스트 케이스마다 얻을 수 있는 최대 총점을 한 줄에 출력한다. 답은 10억 미만임이 보장된다.

예제2

  1. 예제 1

    입력
    2
    9 2 3
    2
    8
    5
    1
    9
    6
    9
    3
    2
    9 3 3
    2
    8
    -5
    3
    5
    8
    4
    8
    -6
    
    예상 출력
    39
    38
    
  2. 예제 2

    입력
    1
    5 2 2
    -3
    5
    -3
    5
    -3
    
    예상 출력
    7