https://codeforces.com/contest/1899/problem/C
题意:
给定一个数组a,Yarik希望找到一个非空子数组,使得这个子数组的元素交替具有奇偶性,并且和最大。我们需要帮助Yarik找到满足条件的子数组的最大和。
const int N = 2e5 + 10;
int n;
int dp[N][3];//ou ji
void solved()
{
scanf("%d", &n);
vector<int> a(n + 1);
for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
for(int i = 1; i <= n; i ++) dp[i][0] = -1e9, dp[i][1] = -1e9;
int res = -1e9;
for(int i = 1; i <= n; i ++)
{
//ji
if(abs(a[i]) % 2)
dp[i][1] = max(dp[i - 1][0] + a[i], a[i]);
else
dp[i][0] = max(dp[i - 1][1] + a[i], a[i]);
// cout <<"i = " << i << " " << dp[i][0] << " 1=" << dp[i][1] << endl;
res = max(res, max(dp[i][0], dp[i][1]));
}
printf("%d\n", res);
}
int main()
{
int t; scanf("%d", &t);
while(t --) solved();
return 0;
}