题解!!!!
2025-02-15 20:53:25
发布于:广东
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 5;
typedef long long ll;
ll dp[maxn][2];
ll a[maxn], pre[maxn], fen[maxn], lst[maxn];
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
if (a[i] == a[i - 1]) fen[i] = a[i];
else fen[i] = 0;
}
for (int i = 1; i <= n; i++) pre[i] = pre[i - 1] + fen[i];
memset(dp, 0, sizeof(dp));
memset(lst, -1, sizeof(lst));
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= 1; j++) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j ^ 1]);
if (lst[a[i]] == -1) continue ;
if (a[i] == a[i - 1]) {
dp[i][j] = max(dp[i][j], dp[i - 1][j] + a[i]);
}
ll other_col = pre[i - 1] - pre[lst[a[i]] + 1];
dp[i][j] = max(dp[i][j], dp[lst[a[i]] + 1][j ^ 1] + other_col + a[i]);
}
lst[a[i]] = i;
}
cout<< dp[n][1] <<endl;
}
int main() {
int T;
cin >> T;
while(T--) {
solve();
}
}
作者是个爆米花!!!
可加ID!!!!
这里空空如也
有帮助,赞一个