T3有一个做法不知哪里有问题
查看原帖
T3有一个做法不知哪里有问题
679239
Lindone楼主2024/10/26 22:31

我用的动态规划,FiF_i表示第ii个位置和第i1i-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;
}

2024/10/26 22:31
加载中...