题目地址
今天是小Z的生日,同学们为他带来了一块蛋糕。
这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。
小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。
吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。
输入格式
第一行包含两个整数N和M,表示共有N小块蛋糕,小Z最多只能吃M小块。
第二行包含空格隔开的N个整数,第i个整数PiPi代表第 i 小块蛋糕的幸运值。
输出格式
输出包含一个整数,为小Z能够得到的最大幸运值。
数据范围
1≤N≤5000001≤N≤500000,
−500≤Pi≤500
输入样例:
5 2
1 2 3 4 5
输出样例:
9
滑动窗口 前缀和 然后还是 TLE的版本
1 #include <iostream> 2 3 4 using namespace std; 5 6 const int N = 5e5+10; 7 8 int luck[N]; 9 int preSum[N]; 10 11 12 13 int m ,n; 14 15 int ans =0; 16 17 int main() 18 { 19 cin >>n>> m; 20 21 for (int i = 1; i <= n; i++) { 22 cin >> luck[i] ; 23 preSum[i] = preSum[i - 1] + luck[i]; 24 } 25 26 for (int l = 0; l <= n; l++) 27 { 28 for (int j = l +1; j <= n; j++) { 29 if (j - l > m) 30 break; 31 int sum = preSum[j] - preSum[l]; 32 if (sum > ans) { 33 ans = sum; 34 } 35 } 36 } 37 38 cout << ans << endl; 39 40 41 42 return 0; 43 }
附上限时内通过的代码地址 https://www.acwing.com/blog/content/150/