我用的动态规划,Fi表示第i个位置和第i−1个位置颜色不同,求找错
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MaxN = 1e6 + 5;
const LL MaxV = 1e6 + 5;
LL T, N, Max, A[MaxN];
LL F[MaxN], G[MaxV];
LL S[MaxN];
void Solve()
{
Max = 0;
scanf("%lld", &N);
for (LL i = 1; i <= N; ++i)
{
scanf("%lld", &A[i]);
S[i] = S[i - 1] + (A[i] == A[i - 1]) * A[i];
}
for (LL i = 2; i <= N + 1; ++i)
{
F[i] = max(Max + S[i - 1], G[A[i]] + S[i - 1] + A[i]);
G[A[i - 1]] = max(G[A[i - 1]], F[i] - S[i]);
Max = max(Max, F[i] - S[i]);
}
for (LL i = 1; i <= N; ++i)
{
G[A[i]] = -1e18;
}
printf("%lld\n", F[N + 1]);
}
int main()
{
scanf("%lld", &T);
memset(G, 128, sizeof(G));
while (T--)
{
Solve();
}
return 0;
}