Yarik and Array—CF1899C
一道不难的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;
}