【题目链接】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;
}