基础区间dp
AC_Code
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 110; 5 int dp[maxn][maxn]; 6 int col[maxn]; 7 8 int main() 9 { 10 int t,cas=0; 11 scanf("%d",&t); 12 while( t-- ){ 13 int n; 14 scanf("%d",&n); 15 for(int i=1;i<=n;i++){ 16 scanf("%d",&col[i]); 17 } 18 19 for(int i=1;i<=n;i++){ 20 dp[i][i]=1; 21 } 22 for(int j=2;j<=n;j++){ 23 for(int i=1;i<j;i++){ 24 ///第 j 天穿衣 25 dp[i][j]=dp[i][j-1]+1; 26 for(int k=i;k<j;k++){ 27 if( col[k]==col[j]){ 28 ///第 j 天不穿,当第 j 天和第 k 天穿的衣服相同, 29 ///将 k+1 ~ j-1 衣服套着穿后全部脱掉 30 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j-1]); 31 } 32 } 33 } 34 } 35 36 printf("Case %d: %d ",++cas,dp[1][n]); 37 } 38 return 0; 39 }