#include using namespace std; #define sd(mark) scanf("%d",&mark) #define ss(mark) scanf("%s",&mark) #define sl(mark) scanf("%lld",&mark) #define debug(mark) printf("check%d\n",mark) #define clr(mark) memset(mark,0,sizeof(mark)) #define F first #define S second #define MP make_pair #define PB push_back #define ll long long #define INF 1e16 #define N 10010 #define K 1010 ll dp[N],c[N]; ll minn[N],postmin[N]; int n; void updatepost() { postmin[n] = minn[n]; for(int i=n-1;i>=0;--i) postmin[i] = min(postmin[i+1],minn[i]); } int main() { int k,i,j; sd(n);sd(k); for(i=1;i<=n;++i) sl(c[i]); for(i=0;i<=n;++i) minn[i]=INF; minn[0]=0; updatepost(); for(i=1;i<=n;++i) { for(j=0;j<=n;++j) dp[j] = minn[j]; int hi = min(n,i+k); int lo = max(1,i-k); dp[hi] = min(dp[hi],postmin[lo-1]+c[i]); minn[hi] = min(minn[hi],dp[hi]); updatepost(); } printf("%lld\n",minn[n]); }