题目:
求最小要多少件衣服
思路
初始化dp[i][i] = 1;
枚举长度{枚举开头{if(a[j] == a[L] 继承dp[j][L - 1]); dp[j][L]取min forever}};
ACcode
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int inf = 0x3f3f3f3f;
int t,n;
int dp[105][105],a[105];
int main()
{
scanf("%d",&t);
for(int T = 1;T <= t; T++){
scanf("%d",&n);
for(int i = 1;i <= n; i++) scanf("%d",&a[i]);
for(int i = 1;i <= n; i++){
for(int j = 1;j <= n; j++){
dp[i][j] = inf;
if(i == j) dp[i][j] = 1;
}
}
for(int i = 2;i <= n; i++){//枚举长度
for(int j = 1;j + i - 1 <= n; j++){//枚举开头
int L = j + i - 1;
if(a[j] == a[L]) dp[j][L] = dp[j][L - 1];
for(int f = j;f < L; f++){
dp[j][L] = min(dp[j][L],dp[j][f] + dp[f + 1][L]);
}
}
}
printf("Case %d: %d\n",T,dp[1][n]);
}
}