题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会
思路:dp[i][j]代表从区间i到区间j最少的穿衣数量,默认dp[i][j]这个状态的穿衣数,就要等于dp[i+1]+1,如果在k(i<k<=j)
天里穿的衣服和第i天相同,那么dp[i][j]=min(dp[i+1][k-1]+dp[k][j]) 。
#include<bits/stdc++.h>
using namespace std;
int dp[110][110],a[110];
int main(){
int T,t=1;scanf("%d",&T);
while(T--){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) dp[i][i]=1;
for(int i=n-1;i>=1;i--){
for(int j=i+1;j<=n;j++){
dp[i][j]=dp[i+1][j]+1;
for(int k=i+1;k<=j;k++){
if(a[i]==a[k]) dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k][j]);
}
}
}
printf("Case %d: %d\n",t++,dp[1][n]);
}
}