题意:
将一个字符串化分成最少的部分,每一个部分都是回文串
Sample Input
3
racecar
fastcar
aaadbccb
Sample Output
1
7
3
题解:
如果 区间(j,i)是回文串,那么就
if(judge(j,i))
dp[i]=min(dp[i],dp[j-1]+1);
初始化dp【i】= i
详细见代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[1010];
char str[1010];
int judge(int a,int b)
{
while(a<=b&&str[a]==str[b])
a++,b--;
return a>=b;
}
int main()
{
int T;
//freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
dp[0]=0;
scanf("%s",str+1);
int len=strlen(str+1);
for(int i=1;i<=len;i++){
dp[i]=i;
for(int j=1;j<=i;j++){
if(judge(j,i))
dp[i]=min(dp[i],dp[j-1]+1);
}
}
printf("%d\n",dp[len]);
}
return 0;
}