咱先看一眼算法标签,发现是思维题、枚举、前缀和
Buttt其实我们根据上诉的样例解释部分就会发现,其实这就是一个长度为⌈n/2⌉(向上取整哦)的连续子数组的最大和。
这题我也用暴力法试过啦,很明显会TLE
如果你对dp题目不太熟悉的话可以看看这个LeetCode01连续子数组最大和(动态规划)
简单来来说呢就是有进步我就要你,没进步我就不要你
ACCode:
#include <bits/stdc++.h>
using namespace std;
int main(){int T;cin>>T;for(int c=1;c<=T;c++){int N;cin>>N;string str;cin>>str;str=' '+str;vector<int>s(N+1);//s.reserve(N+1);for(int i=1;i<=N;i++){s[i] = s[i-1]+(str[i]-'0');}//计算前缀和int len=(N+1)>>1;//因为是向上取整故而直接加1int res=0;for(int i=len;i<=N;i++){res=max(res,s[i]-s[i-len]);//This is key!!!}cout<<"Case #"<<c<<": "<<res<<"\n";}return 0;
}
看完代码就发现,其实超简单是不是。主要还是理解题意(考阅读hhhhh)