一道不难的DP,根据代码就能看出思路。
C o d e Code Code
#include <bits/stdc++.h>
#define int long long
#define sz(a) ((int)a.size())
#define all(a) a.begin(), a.end()
using namespace std;
using PII = pair<int, int>;
using i128 = __int128;
const int inf = 1e18;
const int N = 2e5 + 10;
int n;
int a[N];
void solve(int Case) {
cin >> n;
vector<int> f(n + 1);
for (int i = 1; i <= n; i ++) cin >> a[i];
int res = -inf;
for (int i = 1; i <= n; i ++) {
if (i == 1 || abs(a[i]) % 2 == abs(a[i - 1]) % 2) {
f[i] = a[i];
} else {
f[i] = max(f[i - 1] + a[i], a[i]);
}
res = max(res, f[i]);
}
cout << " ";
cout << res << "\n";
}
signed main() {
cin.tie(0)->ios::sync_with_stdio(false);
int T = 1;
cin >> T; cin.get();
int Case = 0;
while (++ Case <= T) solve(Case);
return 0;
}