- 当c[e-1] = c[e] 时显然有dp[][e] = dp[][e-1]
- 更新是更新当第k场舞会衣服与第e场衣服一致时,假设第k场衣服一直穿着
#include<bits/stdc++.h>
using namespace std;
#define fst first
#define sec second
#define sci(num) scanf("%d",&num)
#define scl(num) scanf("%lld",&num)
#define mem(a,b) memset(a,b,sizeof a)
#define cpy(a,b) memcopy(a,b,sizeof b)
typedef long long LL;
typedef pair<int,int> P;
const int MAX_N = 110;
const int MAX_M = 10000;
int dp[MAX_N][MAX_N];
int c[MAX_N];
int main() {
int T;
sci(T);
for (int cs = 1;cs <= T;cs++) {
int N;
sci(N);
for (int i = 1;i <= N;i++)
sci(c[i]);
mem(dp,0x3f3f3f3f);
for (int i = 1;i <= N;i++)
dp[i][i] = 1;
for (int len = 1;len < N;len++) {
for (int i = 1;i + len <= N;i++) {
int e = i + len;
dp[i][e] = dp[i][e - 1] + 1;
if (c[e] == c[e - 1]) dp[i][e] = dp[i][e- 1];
for (int k = i; k < e;k++) {
if (c[k] == c[e]) {
dp[i][e] = min(dp[i][e],dp[i][k] + dp[k + 1][e - 1]);
}
}
}
}
printf("Case %d: %d\n", cs, dp[1][N]);
}
return 0;
}