https://vjudge.net/contest/280305#problem/K
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int i,j,t,n,kk,a[1000],dp[1000][1000];
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++)
dp[i][i]=1;
for(j=2; j<=n; j++)
for(i=1; i<j; i++)
{
dp[i][j]=dp[i][j-1]+1;
for(int k=i; k<j; k++)
if(a[k]==a[j])
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j-1]);
}
kk++;
printf("Case %d: %d\n",kk,dp[1][n]);
}
}