筆記:
例題:
#include<bits/stdc++.h>
using namespace std;
const int N = 5000010;
char str[N];
int s[N];
int main(){int t;cin>>t;for(int a=1;a<=t;a++){int n;cin>>n;scanf("%s",str+1);for(int i=1;i<=n;i++){s[i]=s[i-1]+str[i]-'0';//前綴和 }int k=(n+1)/2;int res=0;for(int i=k;i<=n;i++)res=max(res,s[i]-s[i - k]);printf("Case #%d: %d\n",a,res);}return 0;
}
這道題完全可以等價為求求長度為(n+1)/2的連續子數組的最大和,使用前綴和求和,依次遍歷并求最大值。