51nod 1154 回文串划分
输入字符串S(S的长度<= 5000)。
输出最少的划分数量。
abbaabaa
3
马拉车算法+DP
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define MOD 1000000007
#define MX 5005
int n;
int len;
char temp[MX];
char str[MX*2];
int p[MX*2];
int dp[MX*2];
void Init()
{
len = 0;
str[len++]='@';
str[len++]='#';
n = strlen(temp);
for (int i=0;i<n;i++)
{
str[len++]=temp[i];
str[len++]='#';
}
memset(p,0,sizeof(p));
}
void Manacher()
{
Init();
int mx = 0, id =0;
for (int i=1;i<len;i++)
{
p[i] = mx>i ? min(p[2*id-i],mx-i):1;
while (str[i+p[i]]==str[i-p[i]]) p[i]++;
if (i+p[i]>mx)
{
mx = i+p[i];
id = i;
}
}
}
int main()
{
while (scanf("%s",temp)!=EOF)
{
Manacher();
for (int i=0;i<n;i++)
{
dp[i] = i+1; //初值
int pos = (i+1)*2;
for (int j=pos;j>=1;j--)
{
if(j+p[j]-2>=pos)
{
int pre = (j-(pos-j))/2-1;
if (pre==0) dp[i]=1;
else dp[i]= min(dp[pre-1]+1,dp[i]);
}
}
}
printf("%d\n",dp[n-1]);
}
return 0;
}
51nod 1154 回文串划分的更多相关文章
- 51Nod - 1154 回文串划分(最少回文串dp)
回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b ...
- 1154 回文串划分(DP+Manacher)
1154 回文串划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. ...
- 51NOD 1154 回文串的划分(DP)
思路:参考了网上,思路很清奇,借助vis[i][j]来表示从i到j是否为回文串,回文串这边是用的双重循环来写的:dp[i]用来表示以i结尾的字符串最少的回文串有多长. #include<cstr ...
- 【51nod 1154】 回文串划分
有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b|b|a|a|b ...
- Atcoder CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning 回文串划分
题目链接 题意 给定一个字符串(长度\(\leq 2e5\)),将其划分成尽量少的段,使得每段内重新排列后可以成为一个回文串. 题解 分析 每段内重新排列后是一个回文串\(\rightarrow\)该 ...
- 回文串+回溯法 URAL 1635 Mnemonics and Palindromes
题目传送门 /* 题意:给出一个长为n的仅由小写英文字母组成的字符串,求它的回文串划分的元素的最小个数,并按顺序输出此划分方案 回文串+回溯:dp[i] 表示前i+1个字符(从0开始)最少需要划分的数 ...
- UVA11584 划分成回文串
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/B 紫书275 题意:输入一个字符,最少能划分几个回文串 分析 ...
- Uva 11584,划分成回文串
题目链接:https://uva.onlinejudge.org/external/115/11584.pdf 题意: 一个字符串,将它划分一下,使得每个串都是回文串,求最少的回文串个数. 分析: d ...
- UVa 11584 划分成回文串
https://vjudge.net/problem/UVA-11584 题意: 给出一串字符,把它划分成尽量少的回文串. 思路: 用d[i]表示划分到i时所能划分的最小个数,转移方程为d[i]=mi ...
随机推荐
- 【转】c++ 如何批量初始化数组 fill和fill_n函数的应用
http://blog.csdn.net/sunquana/article/details/9153213 一. fill和fill_n函数的应用: fill函数的作用是:将一个区间的元素都赋予val ...
- 再理解HDFS的存储机制
再理解HDFS的存储机制 1. HDFS开创性地设计出一套文件存储方式.即对文件切割后分别存放: 2. HDFS将要存储的大文件进行切割,切割后存放在既定的存储块(Block)中,并通过预先设定的优化 ...
- web 界面设计---大道至简
http://www.cnblogs.com/coder2012/p/4023442.html 一个非常精简的webpy页面博客 qing.weibo.com 新浪的轻微博也不错精简
- angularjs学习之六(angularjs中directive指令的一般编程事件绑定 模板使用等)
angular js 中模板的使用.事件绑定以及指令与指令之间的交互 相应教学视频地址(需FQ):v=aG8VD0KvUw4">angularjs教学视频 <!doctype h ...
- Hibernate 之 二级缓存
在上篇文章中我们对缓存以及Hibernate的一级缓存进行了介绍,接下来的主要内容将是Hibernate的二级缓存. 二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所 ...
- 较大主干网的ISP通常控制信道利用率不超过50%
信道利用率 网络利用率 加权平均值
- Linux如何查看进程等常用命令
1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ps c 列出程序时,显示每个程序真正的 ...
- 漫谈Deep PCA与PCANet
又到了无聊的写博客的时间了,因为电脑在跑程序.眼下无事可做.我认为把昨天我看的一些论文方面的知识拿出来和大家分享一下. 美其名曰我是在研究"深度学习".只是因为本人是穷屌丝一个,买 ...
- BZOJ_3620_似乎在梦中见过的样子_KMP
BZOJ_3620_似乎在梦中见过的样子_KMP Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka ...
- sass 基本语法
sass语法 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号. 而本教程 ...