#include using namespace std; #define si(i) scanf("%d",&i) #define si2(i,j) scanf("%d %d",&i,&j) #define si3(i,j,k) scanf("%d %d %d",&i,&j,&k) #define slli(i) scanf("%lld",&i) #define slli2(i,j) scanf("%lld %lld",&i,&j) #define slli3(i,j,k) scanf("%lld %lld %lld",&i,&j,&k) #define pi(i) printf("%d\n",i) #define plli(i) printf("%lld\n",i) #define SYNC ios_base::sync_with_stdio(0) #define mp make_pair #define FF first #define SS second #define pb push_back #define fill(a,v) memset(a,v,sizeof a) #define ceil(a,b) (((a)%(b)==0)?((a)/(b)):((a)/(b)+1)) #define rem(a,b) ((a<0)?((((a)%(b))+(b))%(b)):((a)%(b))) #define MOD 1000000007LL #define INF 10000000000000000LL #define N 100007 typedef long long int ll; typedef pair PII; typedef pair PLL; typedef vector VS; typedef vector VI; typedef vector VL; typedef vector VOII; typedef vector VOLL; typedef vector VOVI; int dX[] = {-1,0,1,0,-1,1,1,-1}; int dY[] = {0,1,0,-1,1,1,-1,-1}; ll n,k; ll c[10005]; map,ll> data; ll recurse(ll l,ll r,ll lft,ll ryt) { if(l > r) return 0; if(data.find(mp(mp(l,r),mp(lft,ryt))) != data.end()) return data[mp(mp(l,r),mp(lft,ryt))]; ll ret = INF; if(lft == 1 && ryt == 1) { for (ll i = l; i <= l + k && i <= r; ++i) { ret = min(ret,c[i] + recurse(i + k + 1,r,0,1)); } for (ll i = r; i >= r - k && i >= l; --i) { ret = min(ret,c[i] + recurse(l,i - k - 1,1,0)); } } else if(lft == 0 && ryt == 0) { if(r - l + 1 < 2*k + 1) return ret; ret = min(ret,c[l + k] + recurse(l + 2*k + 1,r,0,0)); ret = min(ret,c[r - k] + recurse(l,r - 2*k - 1,0,0)); } else if(lft == 0 && ryt == 1) { for (ll i = r; i >= r - k && i - k >= l; --i) { ret = min(ret,c[i] + recurse(l,i - k - 1,0,0)); } if(l + 2*k <= r) ret = min(ret,c[l + k] + recurse(l + 2*k + 1,r,0,1)); } else { for (ll i = l; i <= l + k && i + k <= r; ++i) { ret = min(ret,c[i] + recurse(i + k + 1,r,0,0)); } if(r - 2*k >= l) ret = min(ret,c[r - k] + recurse(l,r - 2*k - 1,1,0)); } data[mp(mp(l,r),mp(lft,ryt))] = ret; return ret; } int main() { cin >> n >> k; for (ll i = 1; i <= n; ++i) { cin >> c[i]; } cout << recurse(1,n,1,1) << endl; return 0; }