#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[505],dp[505][505][5];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=0;j<3;j++) dp[i][i][j] = 3-j-1;
for(int len=2;len<=n;len++)
for(int i=1;i+len-1<=n;i++)
{
int j = i+len-1;
for(int l=3-1;l>=0;l--)
{
if(l == 3 - 1)
dp[i][j][l] = min(dp[i][j][l],dp[i+1][j][0]);
else if(l < 3 - 1)
dp[i][j][l] = min(dp[i][j][l],dp[i][j][l+1]+1);
if(a[i] == a[i+1])
dp[i][j][l] = min(dp[i][j][l],dp[i+1][j][min(3-1,l+1)]);
for(int p=i+1;p<=j-1;p++)
if(a[i] == a[p+1])
dp[i][j][l] = min(dp[i][j][l],dp[i+1][p][0]+dp[p+1][j][min(3-1,l+1)]);
}
}
printf("%d",dp[1][n][0]);
return 0;
}
91pts WA #8