机の上に N 個の飴が横一列に並んでおり,左から順に 1 から N までの番号が付けられている.飴 i ( 1 ≦ i ≦ N ) の美味しさは A i である.
JOI 君は, N 個の飴のうちいくつかを選んで食べることにした.
ただし,飴を食べ過ぎないために,どの連続する K 個の飴についても,そのうち高々 2 個しか食べないようにする.すなわち,どの j ( 1 ≦ j ≦ N - K + 1 ) についても,飴 j から飴 j + K - 1 までの連続する K 個の飴のうち,食べる飴の個数は 2 個以下でなければならない.
このもとで,JOI 君は食べる飴の美味しさの合計をできるだけ大きくしたい.
N 個の飴の美味しさと K が与えられたとき,JOI 君が食べる飴の美味しさの合計の最大値を求めるプログラムを作成せよ.
2 ≦ K ≦ N ≦ 3 000 .
1 ≦ A i ≦ 10 9 ( 1 ≦ i ≦ N ).
入力される値はすべて整数である.
( 4 点) N ≦ 20 .
( 19 点) K ≦ 10 .
( 47 点) N ≦ 300 .
( 30 点) 追加の制約はない.
採点に関する注意
すべての提出はジャッジシステム上で採点される.
提出されたソースコードは,小課題に対応するすべての採点用入力データについて正しい結果を返したとき,その小課題について正解と認められる.
各提出の得点は,提出されたソースコードについて正解と認められた小課題の得点の合計である.
この課題の得点は, この課題に対するすべての提出の得点の最大値 である.
現在の得点は「提出結果」タブの「自分の得点状況」から確認できる.
入力は以下の形式で標準入力から与えられる.
N K
A 1 A 2 ... A N
標準出力に,JOI 君が食べる飴の美味しさの合計の最大値を 1 行で出力せよ.
5 4
1 3 2 4 3
8
6 3
3 7 1 5 6 4
21
5 2
3 3 2 2 1
11
12 5
864814169 716638377 926889183 891468826 217138351 891972397 504371916 678159995 435478604 181254225 760822841 688502728
4427122428