#include using namespace std; typedef long long ll; const ll INF = 1e15; int main(){ int n,k; cin >> n >> k; vector arr(n+1); for(int i = 1; i <= n; ++i) scanf("%d",&arr[i]); vector dp(n+1,INF); dp[0] = 0; for(int i = 1; i <= n; ++i){ ll best = INF; int bid = i-1; for(int j = min(n,i+k); j >= max(1,i-k); --j){ while(bid >= max(j-k-1,0)){ best = min(best,dp[bid]); --bid; } // cout << "i = " << i << ", j = " << j << ": " << bid << ' ' << best << '\n'; // cout << "touching: " << min(j+k,n) << '\n'; dp[min(j+k,n)] = min(dp[min(j+k,n)],best+arr[j]); dp[min(j+k,n)] = min(dp[min(j+k,n)],dp[min(j+k+1,n)]); } for(int j = min(n,i+k)-1; j >= max(1,i-k); --j){ dp[j] = min(dp[min(j+1,n)],best+arr[j]); } // cout << dp[i] << '\n'; } cout << dp[n] << '\n'; }