把一个字符串划分成尽量少的回文串
dp[i]表示从1到i划分成的最少回文串数,judge函数判断从j到i是否为回文串
#include <cstring>
#include <algorithm>
#include<iostream>
using namespace std;
char str[1005];
int dp[1005];
const int IN=0x3f3f3f;//无限大的设置方法
bool judge(int l,int r){
while(l<=r){
if(str[l]!=str[r]) return false;
l++;
r--;
}
return true;
}
int main(){
int T;
cin>>T;
while(T--){
memset(dp,IN,sizeof(dp));
dp[0]=0;
cin>>str+1;
int len=strlen(str+1);
for(int i=1;i<=len;i++){
for(int j=1;j<=i;j++){
if(judge(j,i)){
dp[i]=min(dp[i],dp[j-1]+1);
}
}
}
cout<<dp[len]<<endl;
}
return 0;
}