#include <bits/stdc++.h>
using namespace std;
int t,n,a[205],col[205],c[205],len[205],f[205][205][205];
int solve(int l,int r,int k){
if(f[l][r][k])return f[l][r][k];
if(l==r)return (len[r]+k)*(len[r]+k);
f[l][r][k]=solve(l,r-1,0)+(len[r]+k)*(len[r]+k);
for(int i=l;i<r-1;i++){
if(c[i]==c[r]){
f[l][r][k]=max(f[l][r][k],solve(i+1,r-1,0)+solve(l,i,len[r]+k));
}
}
return f[l][r][k];
}
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
cin>>col[1];
int len1=1,tot=0;
for(int i=2;i<=n;i++){
cin>>col[i];
if(col[i]!=col[i-1]){
tot++;
c[tot]=col[i-1];
len[tot]=len1;
len1=1;
}else len1++;
}
if(len1){
c[++tot]=col[n];
len[tot]=len1;
}
for(int j=1;j<=tot;j++){
for(int k=1;k<=n;k++){
f[i][j][k]=(len[j]+k)*(len[j]+k);
}
}
cout<<"Case "<<i<<": "<<solve(1,tot,0)<<endl;
}
为啥第36行的k=1就对,k=0就挂
return 0;
}