【题目链接】http://https://cn.vjudge.net/problem/UVA-11584
【题解】 有一个长度不大于1000的字符串序列,问里面有多少个回文串,回文串就是,比如说abcba就是一个回文串,abacbc这里面就有两个回文串。
裸的区间DP了,只要判断一下回文部分即可,详解看代码
【AC代码】
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1005;
const int INF=1e5;
int dp[N];
char s[N];
bool is_huiwen(int j,int i)//判断回文串
{
while(j<i)
{
if(s[j]!=s[i])
return false;
++j;
--i;
}
return true;
}
int min(int x,int y)
{
return x>y?y:x;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s+1);
int len=strlen(s+1);
dp[0]=0;//记得初始化
for(int i=1;i<=len;i++)
{
dp[i]=INF;
for(int j=0;j<i;j++)
{
if(is_huiwen(j+1,i))
dp[i]=min(dp[j]+1,dp[i]);
}
}
printf("%d\n",dp[len]);
}
return 0;
}