|
|
|
@ -5,14 +5,18 @@ const int N = 1000010;
|
|
|
|
|
#define endl "\n"
|
|
|
|
|
int a[N], s[N];
|
|
|
|
|
int n, k; // n个城市,传送半径为k
|
|
|
|
|
int res;
|
|
|
|
|
signed main() {
|
|
|
|
|
cin >> n >> k; // n个城市,传送半径为k
|
|
|
|
|
for (int i = 1; i < n; i++) { // 以起点为线段命名的编号,所以1~n共n个城市,其实是n-1条线段
|
|
|
|
|
cin >> a[i]; // 走这条路要耗费时间a[i]
|
|
|
|
|
s[i] += s[i - 1] + a[i]; // 前缀和
|
|
|
|
|
}
|
|
|
|
|
int ans = s[n - 1]; // sum总和
|
|
|
|
|
// 这是在枚举什么?
|
|
|
|
|
for (int i = k; i < n; i++) ans = min(ans, s[n - 1] - (s[i] - s[i - k]));
|
|
|
|
|
cout << ans << endl;
|
|
|
|
|
/*
|
|
|
|
|
1、找出[1,n-1]的原始数组中,长度为k的子区间,加法和最大的区间段
|
|
|
|
|
2、注意:如果是枚举原始数组,那么就是 [1,n-k]是有效区间
|
|
|
|
|
3、现在遍历的是前缀和数组,为了表示a[1],需要使用的是s[1]-s[0],所以,i从0开始
|
|
|
|
|
*/
|
|
|
|
|
for (int i = 0; i + k < n; i++) res = max(res, s[i + k] - s[i]);
|
|
|
|
|
cout << s[n - 1] - res << endl;
|
|
|
|
|
}
|