1.想法:两边拿走那么剩下的是连续的
2.超时:减少循环、计算量,即,原本是逐个加起来计算,可以改为每次减去第一个,加上下一个数列的最后一个。
3.代码:
#include<iostream>
#include<iomanip>
#include<string.h>
#include<cmath>
using namespace std;
int main(){
int n,k,a[100003],jiazhi[100003]={0};
cin>>n>>k;
long long temp=0;
if(n==k) {
for(int i=1;i<=n;i++){
cin>>a[i];
temp+=a[i];
}
cout<<temp<<endl;
}
else{
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-k+1;i++){
jiazhi[1]+=a[i];
}
temp=jiazhi[1];
for(int i=n-k+1;i<=n;i++){
temp+=a[i];
}
for(int i=2;i<=k;i++){
jiazhi[i]=jiazhi[i-1]-a[i-1]+a[i-1+n-k];
}
long long jz=jiazhi[1];
for(int i=1;i<=k;i++){
if(jiazhi[i]<jz) jz=jiazhi[i];
}
cout<<temp-jz<<endl;
}
return 0;
}