当前位置: 代码迷 >> 综合 >> UVA 11583 Partitioning by Palindromes (区间DP)
  详细解决方案

UVA 11583 Partitioning by Palindromes (区间DP)

热度:94   发布时间:2023-12-23 00:28:27.0

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