题目大意:
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。
#include<stdio.h>
#include<vector>
#include<map>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[1010];
int d[1010];
int work(char c[],int st,int et)
{
int i,j,len,k;
while(st<et)
{
if(a[st]!=a[et])
return 0;
st++;
et--;
}
return 1;
/*for(i=st,k=et;i<=(et-st+1)/2;i++,k--)
{
// if(et==5)
// printf("%d %d\n",i,k);
if(a[i]!=a[k])
return 0;
}
return 1;*/
}
int main()
{
int i,j,k,n,m;
scanf("%d",&n);
while(n--)
{
scanf("%s",a);
int len=strlen(a);
d[0]=1;
for(i=1;i<len;i++)
{
d[i]=d[i-1]+1;
for(j=0;j<i;j++)
{
if(a[i]==a[j]&&work(a,j,i))
{
if(j!=0)
d[i]=min(d[i],d[j-1]+1);
else
d[i]=1;
}
}
}
// for(i=0;i<len;i++)
// printf("%d ",d[i]);
// printf("%d\n",work(a,1,5));
printf("%d\n",d[len-1]);
}
return 0;
}