d[i]表示前面i个字符划分成的最小回文串个数,

转移:当第i字符加进来和前面区间j构成回文串,那么d[i] = d[j]+1。

要判断前面的字符j+1到i是不是回文串,可以用Manacher算法预处理出来。(其实O(n^2)判断回文串的也可以,时间复杂度不会变,只是为了学习Manacher

Manacher最奇妙的地方在于用'#'把奇偶串的问题合并到了一起以及利用对称性快速计算P数组

#include <iostream>
#include <algorithm>
#include <cstring>
#include<cstdio>
using namespace std;
const int MAX = ;
int len, p[*MAX];
char str[MAX], newstr[*MAX];
bool isPal[MAX][MAX]; void change()
{
int i;
newstr[] = '@';
newstr[] = '#';
for (i = ; i < len; i++){
newstr[*i + ] = str[i];
newstr[*i + ] = '#';
}
newstr[*len + ] = '\0';
return ;
} #define toPre(x) ((x-1)>>1) void Manacher()
{
int i, j, id, maxid = ;
len = * len + ;
for (i = ; i < len; i++){
if (maxid > i){
p[i] = min(p[*id - i], maxid - i);//利用对称性快速计算p数组
}
else{
p[i] = ;
}
while (newstr[i+p[i]] == newstr[i-p[i]])
p[i]++;
if (p[i] + i > maxid){
maxid = p[i] + i;
id = i;
}
}
for( i = ; i < len; i++){
char pivot = newstr[i];
p[i]--;
for(j = !(pivot<='z'&&pivot>='a'); j < p[i]; j+=){
int u = toPre(i-j),v = toPre(i+j);
isPal[u][v] = true;
}
}
} int d[MAX]; int main()
{
//freopen("in.txt","r",stdin);
int T; scanf("%d",&T);
while (T--){
scanf("%s",str);
len = strlen(str);
change();
memset(isPal,,sizeof(isPal));
Manacher();
len = (len-)>>;
for(int i = ; i < len; i++){
d[i] = isPal[][i]?:i+;
for(int j = ; j < i; j++)if(isPal[j+][i]){
d[i] = min(d[i],d[j]+);
}
}
printf("%d\n",d[len-]);
} // system("pause");
return ;
}

UVA 11584 Partitioning by Palindromes 划分回文串 (Manacher算法)的更多相关文章

  1. UVA-11584 Partitioning by Palindromes 动态规划 回文串的最少个数

    题目链接:https://cn.vjudge.net/problem/UVA-11584 题意 给一个字符串序列,问回文串的最少个数. 例:aaadbccb 分为aaa, d, bccb三份 n< ...

  2. luoguP4555 [国家集训队]最长双回文串 manacher算法

    不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i ...

  3. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  4. 最长回文---hdu3068 (回文串 manacher 算法模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...

  5. 37:密码截取(回文串manacher算法)

    题目描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如 ...

  6. 【BZOJ2565】最长双回文串 (Manacher算法)

    题目: BZOJ2565 分析: 首先看到回文串,肯定能想到Manacher算法.下文中字符串\(s\)是输入的字符串\(str\)在Manacher算法中添加了字符'#'后的字符串 (构造方式如下) ...

  7. UESTC-1975弗吉桑(回文串,manacher算法)

    弗吉桑 Time Limit: 3000 MS     Memory Limit: 64 MB Submit Status 弗吉桑是一座横跨清水河大草原的活火山,位于子科技大学主楼东北方约 80km ...

  8. 回文串--Manacher算法(模板)

    用途:在O(n)时间内,求出以每一个点为中心的回文串长度. 首先,有一个非常巧妙的转化.由于回文串长度有可能为奇数也有可能为偶数,说明回文中心不一定在一个字符上.所以要将字符串做如下处理:在每两个字母 ...

  9. HDU3068 回文串 Manacher算法

    好久没有刷题了,虽然参加过ACM,但是始终没有融会贯通,没有学个彻底.我干啥都是半吊子,一瓶子不满半瓶子晃荡. 就连简单的Manacher算法我也没有刷过,常常为岁月蹉跎而感到后悔. 问题描述 给定一 ...

随机推荐

  1. 08.IdentityServer4登录中心

    08.IdentityServer4登录中心 IdentityServer就是一套Framework,实现了OAuth的授权 理解OAuth流程,学会怎么使用他 http://ruanyifeng.c ...

  2. UVa 1641 ASCII Area (计算几何,水题)

    题意:给定一个矩阵,里面有一个多边形,求多边形的面积. 析:因为是在格子里,并且这个多边形是很规则的,所以所有格子不是全属于多边形就是全不属于,或者一半,并且我们可以根据"/"和“ ...

  3. iOS QQ 登录

    QQSDK 看官网的文档,确实让人头疼的一件事,说是两个资源文件,就找到了一个(TencentOpenAPI.framework),Demo中也没有找到. 接下来具体实现: 导入库: 添加SDK依赖的 ...

  4. 骨骼蒙皮动画(SkinnedMesh Animation)的实现

    http://blog.csdn.net/zjull/article/details/11529695 1.简介 骨骼蒙皮动画,简称骨骼动画,因其占用磁盘空间少并且动画效果好被广泛用于3D游戏中,它把 ...

  5. 51nod1247(gcd)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1247 题意:中文题诶- 思路:(a, b)可以直接到达(a+b ...

  6. Apache配置https启动不了的解决办法

    配置咱就不多说了,网站一搜一大堆,在这就谈谈Apache引入“http-ssl.conf”文件后无法启动问题吧 去掉#Include conf/extra/httpd-ssl.conf前面的注释Apa ...

  7. hibernate错误总结1

  8. Jquery | 外部插入节点

    after(content) : //在 span 元素外部的后面 插入 "<span><b>Write Less Do More</b><span ...

  9. Jquery | 基础 | .hover()

    https://api.jquery.com/hover/#hover-handlerIn-handlerOut http://jquery.cuishifeng.cn/hover.html

  10. WKWebView简单使用

    #import <WebKit/WebKit.h> @interface SchoolOverviewsViewController ()<WKUIDelegate,WKNaviga ...