题目描述
给一个长度为n的序列,你需要求出其中连续m个数的和的最大值是多少。
输入
第一行给出一个数字T,表示数组总数 (t<100)
每组数据的第一行有两个数字 n,m (0<m≤n≤1e5)
第二行有n个数字ai (0<ai<1e9)
输出
对于每组数据,输出最大的连续m个数之和
样例输入 复制
2
5 2
2 5 4 1 6
8 3
3 5 8 2 1 8 9 7
样例输出 复制
9
24
关键是前n项之和,用a[i]+=a[i-1]循环可得前i项之和,然后a[i+m]-a[i]便是其中i项之和。
#include<iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,m;
scanf("%d%d",&n,&m);
long long a[n];
for(int i=0;i<n;i++){
scanf("%ld",&a[i]);
}
long long s[n]={a[0],0};
for(int i=1;i<n;i++){
s[i]=s[i-1]+a[i];
}
long long max=s[m-1];
int j=n-m;
for(int i=0;i<j;i++){
long long sum=s[i+m]-s[i];
if(sum>max){
max=sum;
}
}
printf("%ld\n",max);
}
return 0;
}