#include using namespace std; const int N = 1000010; #define int long long #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]; // 前缀和 } /* 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; }