数据量才1k 所以就打个n平方的简单dp
一重循环枚举每个位置
二重循环求此位置最优
如果 j+1到i为回文 那么min(dp[j]+1,dp[i])
逐级递推答案为dp【len】
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
char str[maxn];
int dp[maxn];
bool judge(int l,int r)
{
while(l<r)
{
if(str[l]!=str[r]) return 0;
l++;
r--;
}
return 1;
}
int main()
{
//freopen("slight-tree.txt","w",stdout);
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",str+1);
int len=strlen(str+1);
fill(dp,dp+len+1,100000000);
dp[0]=0;
for(int i=1;i<=len;i++)
{
for(int j=0;j<=i;j++)
{
if(judge(j+1,i)) dp[i]=min(dp[i],dp[j]+1);
}
}
printf("%d\n",dp[len]);
}
}