#include #include #include #include #include #include #include #include #include #include #include #define MOD 1e9 + 7 #define eps 1e-9 #define pb push_back #define mp make_pair #define ft first #define sd second #define sz(a) a.size() #define loop(i, n) for(long long (i) = 0; (i) < (n) ; ++ (i)) #define loopn() #define pii pair #define pll pair #define pld pair #define vii vector #define vll vector typedef long long ll; typedef long double ld; using namespace std; /*@Sergey_Miller*/ ll dp[10002][1003]; ll dpin[10002]; ll c[10001]; void solve() { ll n,k; cin >> n >> k; loop(i,n) { cin >> c[i]; } loop(i,n) { loop(j,k+2) { dp[i][j] = 1e15; } dpin[i] = 1e15; } loop(i,n) { if(i == 0) { dp[0][0] = c[0]; dp[0][1] = 0; dpin[0] = c[0]; // dpmin[0] = c[0]; continue; } loop(j,min(i,k)) { dp[i][0] = min(dp[i][0], dpin[i-1-j]); } if(i >= k) { dpin[i] = min(dpin[i], dp[i-k][1] + c[i]); } // // cout << i << " dpin " << dpin[i] << endl; dp[i][0] = min(dp[i][0], dpin[i]); // cout << i << " " << 0 << " " << dp[i][0] << endl; loop(j,k+1) { if(!j) { continue; } if(j == 1) { // continue; // if(i >= k) { // dp[i][0] = min(dp[i][0], dp[i-k][1] + c[i]); // } else { // dp[i][0] = min(dp[i][0], c[i]); // } if(i > k) dp[i][1] = min(dp[i][1], dpin[i-k-1]); } else { if(j <= i) { dp[i][j] = min(dp[i][j], dp[i-1][j-1]); } } // cout << i << " " << j << " " << dp[i][j] << endl; // if(j <= i) // dpmin[i] = min(dpmin[i], dp[i][j]); } } cout << dp[n-1][0] << endl; } int main () { ios::sync_with_stdio(false); // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); solve(); return 0; }