RT,在 YbtOJ 上过了,到洛谷来交一直 WA。求助大佬/kel
#include<bits/stdc++.h>
using namespace std;
const int N=205;
int T,n,a[N];
int tot,awa,col[N],len[N];
int f[N][N][N];
int main()
{
scanf("%d",&T);
while(T--)
{
memset(f,0,sizeof(f));tot=0;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
int now=i;
while(a[now]==a[i]&&now<=n) now++;
col[++tot]=a[i],len[tot]=now-i;
i=now-1;
}
//for(int i=1;i<=tot;i++) cout<<len[i]<<" "<<col[i]<<endl;
for(int ln=1;ln<=tot;ln++)
{
for(int i=1;i<=tot-ln+1;i++)
{
int j=i+ln-1;
for(int k=0;k<=tot;k++)
{
if(i==j) {f[i][j][k]=(len[i]+k)*(len[i]+k);continue;}
f[i][j][k]=f[i][j-1][0]+(len[j]+k)*(len[j]+k);
for(int l=i;l<j;l++)
{
if(col[l]==col[j])
f[i][j][k]=max(f[i][j][k],f[i][l][k+len[j]]+f[l+1][j-1][0]);
}
}
}
}
cout<<"Case "<<(++awa)<<": "<<f[1][tot][0];
if(T) cout<<endl;
}
return 0;
}
//qwq