题目大意
给出一个字符串问最少有多少个回文串。
思路
dp[i]=min{ dp[j-1]+1 } ([j,i]是一个回文串,0<j<i)
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000;
char s[maxn];
int dp[maxn];
bool ok(int l,int r)
{
while(l<r) {
if(s[l]!=s[r]) {
return false;
}
l++,r--;
}
return true;
}
/*
dp[i]=min{dp[j-1]+1}([j,i]是一个回文串,0<j<i)
*/
int main()
{
int T;
cin >> 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;
}