题目链接
题目思路:前缀和加dp
代码实现
#include<bits/stdc++.h> using namespace std; const int Max=1e6; long long a[Max],s[Max]; int main() { int t; cin>>t; while(t--) { int n,k; long long nmax=-1e18,ans=-1e18; cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; s[i]=s[i-1]+a[i]; } for(int i=k;i+k<=n;i++) { nmax=max(nmax,s[i]-s[i-k]); ans=max(ans,nmax+s[i+k]-s[i]); } cout<<ans<<endl; } return 0; }