#pragma region Header #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ft first #define sc second #define X first #define Y second #define mp make_pair #define All(x) (x).begin(),(x).end() #define rAll(x) (x).rbegin(),(x).rend() typedef long long ll; typedef long double ld; using namespace std; ld PI = acos(-1); templateinline const T sqr(const T & x) { return x*x; } ll popcnt(ll mask) { ll cnt = 0; while (mask) cnt += mask & 1, mask >>= 1; return cnt; } ll powi(ll a, ll b, ll mod = 1000000007) { if (b < 2) return b ? a : 1; return (powi((a*a) % mod, b / 2, mod)*(b % 2 ? a : 1LL)) % mod; } ll mod7 = 1000000007; ll mod9 = 1000000009; bool isprime(ll n) { if (n < 2) return 0; for (ll i = 2; i*i <= n; i++) if (n%i == 0) return 0; return 1; } #pragma endregion int main() { ios::sync_with_stdio(0); int n, k; cin >> n >> k; vector a(n); for (int i = 0; i < n; i++) cin >> a[i]; vector dp(n + k, 1e16); for(int i = k; i < n+k;i++) { for (int j = max(-1, i - k * 2 - 1); j < i; j++) dp[i] = min(dp[i], (j==-1?0:dp[j]) + a[i - k]); } ll ans = 1e16; for (int i = n - 1; i < n + k; i++) ans = min(ans, dp[i]); cout << ans << endl; #ifdef _DEBUG system("pause"); // cin.get(); cin.get(); #endif return 0; }