#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) x.begin() , x.end() #define fi first #define se second #define pb push_back #define umax( x , y ) x = max( x , (y) ) #define umin( x , y ) x = min( x , (y) ) #define For( i , a ) for(int i=1;i<=a;i++) #define ort (b+s)/2 #define y2 asrwjaelkf #define y1 asseopirwjaelkf #define set multiset using namespace std; inline int read() { int res = 0 ;int neg ; while(true){char ch = getchar();if(ch>='0' && ch<='9' || ch=='-'){if(ch=='-') neg = -1;else neg = 1 , res = ch-'0';break;} } while(true){char ch = getchar();if(ch>='0' && ch<='9') res*=10 , res+=ch-'0';else break;} return res*neg; } typedef long long Lint; typedef double db; typedef pair ii; typedef pair dd; typedef pair iii; typedef pair i4; const int maxn = 400320; const int maxm = 1000020; const int MOd = 1e9 + 7; int a, b, ar[maxn], mini[maxn]; Lint dn[maxn]; int main() { // freopen("asd.in","r",stdin); //freopen("out.txt","w",stdout); scanf("%d %d",&a,&b); for(int i=1;i<=a;i++) scanf("%d",&ar[i]); mini[a] = ar[a]; for(int i=a-1;i>=1;i--) mini[i] = min( mini[i+1], ar[i] ); Lint ans = 1e18; for(int i=1;i<=b+1;i++) { Lint h = 0; for(int j=i;j<=a;j+=b+b+1) { h += ar[j]; if( j+b >= a ) umin( ans, h ); } } cout << ans << endl; return 0; for(int i=a;i>=1;i--) { int k = i; if( k > a ) k = a; dn[i] = 1e18; for(int j=-b;j<=b && i+j <= a;j++,k++) { if( i+j < 1 ) continue; if( k > a ) k = a; umin( dn[i], ar[i+j] + dn[k+1] ); } } cout << dn[1] << endl; return 0; }