做完这个题之后 我来写博客 我觉得我有必要 翻译解释一下题意
把题目给出的字符串划分几次,使得划分的串都是回文串 并且 划分次数尽量少
特别的 abcdefg 只能划分七次 使得每个字母单独成串
设f[i]表示到第i位为止,最少需要划分几次,答案显然在f[n]
状态转移方程:
if(j-i 是回文串) f[i] = min(f[i],f[j - 1] + 1);
#include<iostream>
#include<cstring>
#include<cstdio>
#define Maxn 1010
using namespace std;
char s[Maxn];
int f[Maxn];
inline bool Judge(int l,int r) {
while(l < r) {
if(s[l] != s[r] ) return false;
l++, r--;
}
return true;
}
int main(int argc,char* argv[]) {
int T; scanf("%d",&T);
while(T--) {
scanf("%s",s + 1);
int len = strlen(s + 1);
memset(f,0,sizeof(f));
for(int i=1; i<=len; i++) {
f[i] = i + 1;
for(int j=1; j<=i; j++)
if(Judge(j,i)) f[i] = min(f[i],f[j - 1] + 1);
}
printf("%d\n",f[len]);
}
return 0;
}