题意: 给定一个字符串, 问最少分为几部分可使各部分均为回文串
分析:
1 dp[i] 表示以i结尾的最少分割数
2 dp[i] = min(dp[j-] + 1 && j-i为回文)
#include
#include
#include
using namespace std;
int dp[1010], t;
char s[1010];
bool ok(int i, int j) {
while(i <= j) {
if(s[i] != s[j])
return 0;
i++;
j--;
}
return 1;
}
int main() {
scanf("%d", &t);
while(t--) {
scanf("%s", s + 1);
int n = strlen(s + 1);
for(int i=1; i<=n; i++) {
dp[i] = i;
for(int j=1; j<=i; j++)
if(ok(j, i))
dp[i] = min(dp[i], dp[j-1] + 1);
}
printf("%d\n", dp[n]);
}
return 0;
}