按照官方数据来看的话,大概能得 50 吗
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e2+10,M=1e5+10;
int n,a[M];
ll f[N][N][N];
ll dfs(int u,int l0,int l1)
{
if(f[u][l0][l1]!=-1) return f[u][l0][l1];
if(u>n) return 0;
ll nxt=a[u]*(a[u]==a[l0]);
f[u][l0][l1]=max(f[u][l0][l1],dfs(u+1,u,l1)+nxt);
nxt=a[u]*(a[u]==a[l1]);
f[u][l0][l1]=max(f[u][l0][l1],dfs(u+1,l0,u)+nxt);
return f[u][l0][l1];
}
void solve1()
{
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
for(int k=0;k<=n;k++)
f[i][j][k]=-1;
printf("%lld\n",dfs(1,0,0));
}
ll dp[M][11][11];
ll dfs1(int u,int l0,int l1)
{
if(dp[u][l0][l1]!=-1) return dp[u][l0][l1];
if(u>n) return 0;
ll nxt=a[u]*(a[u]==l0);
dp[u][l0][l1]=max(dp[u][l0][l1],dfs1(u+1,a[u],l1)+nxt);
nxt=a[u]*(a[u]==l1);
dp[u][l0][l1]=max(dp[u][l0][l1],dfs1(u+1,l0,a[u])+nxt);
return dp[u][l0][l1];
}
void solve2()
{
for(int i=0;i<=n;i++)
for(int j=0;j<=10;j++)
for(int k=0;k<=10;k++)
dp[i][j][k]=-1;
printf("%lld\n",dfs1(1,0,0));
}
void solve()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
if(n<=200) solve1();
else solve2();
}
int main()
{
int T;scanf("%d",&T);
while(T--) solve();
return 0;
}