题目大意是要找到连续的一段奇偶相间的子段的最大和并且输出。
相当于一个变种最大子段和问题。
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int t,n,a[N];
int main()
{
cin>>t;
while(t--)
{
int ans=-1000;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int sum=0;
for(int i=1;i<=n;i++)
{
if(i>1&&(a[i-1]+a[i])%2==0)sum=0;//如果不满足奇偶相间就置为0
sum+=a[i];//满足的话就继续求前缀
ans=max(ans,sum);
if(sum<0)sum=0;
//如果sum小于0,那么要重新置于0,相当于换了开始元素继续累加
//如果不更新的话只会越加越小
}
cout<<ans<<endl;
}
return 0;
}