题目描述
给你一个数列a1,a2,...,an,求m个连续数字组成的子段和最大值。
输入
有多个样例,每个样例的第一行是两个整数n和m,(1≤m≤n;≤100,000)。如果n和m为0表示输入结束,这个样例不需要处理。第二行是n个整数ai,0≤ai≤10000。
输出
每行输出一个整数,即样例的结果。
样例输入
6 3 1 2 3 4 5 6 6 3 1 2 3 3 2 1 0 0样例输出
15 8
解题思路:前缀和 (之前的博客解释过了,听起来高大上,实际上就是个弟中之弟)
AC代码:
- #include
-
- int main()
- {
- int n,m,t,ans;
- while (scanf("%d %d",&n,&m) != EOF && !(n==0 && m==0))
- {
- int nums[100010] = {0};
- for (int i = 1; i <= n; i ++)
- {
- scanf("%d",&nums[i]);
- nums[i] += nums[i-1]; // 前缀和
- }
- ans = nums[m];
- for (int i = m+1; i <= n; i ++)
- {
- t = nums[i]-nums[i-m];
- if (t > ans)
- ans = t;
- }
- printf("%d\n",ans);
- }
- return 0;
- }