第五十二题 UVA11584 划分成回文串 Partitioning by Palindromes

在这里插入图片描述

做完这个题之后 我来写博客 我觉得我有必要 翻译解释一下题意
把题目给出的字符串划分几次,使得划分的串都是回文串 并且 划分次数尽量少
特别的 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;
}
发布了732 篇原创文章 · 获赞 31 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_35776409/article/details/104031907