基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
有一个字符串S,求S最少可以被划分为多少个回文串。
例如:abbaabaa,有多种划分方式。
 
a|bb|aabaa - 3 个回文串
a|bb|a|aba|a - 5 个回文串
a|b|b|a|a|b|a|a - 8 个回文串
 
其中第1种划分方式的划分数量最少。
Input
输入字符串S(S的长度<= 5000)。
Output
输出最少的划分数量。
Input示例
abbaabaa
Output示例
3
相关问题
最长回文子串 V2(Manacher算法) 最长回文子串  回文串划分 V2 6

40 

回文字符串 10

 
 
 
//显然dp,dp[i] 表前 i 个数最少能变几个回文

dp[i] = min(dp[i], dp[z-1]+1)   "s[z],s[z+1]...s[i]" 是一个回文串
用马拉车就是 n*2n ,5000*10000,话说弱鸡我debug一万年。。。
不用就是 n^3 吧,不大懂
 #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*];
int p[MX*];
int dp[MX*]; void Init()
{
len = ;
str[len++]='@';
str[len++]='#';
n = strlen(temp);
for (int i=;i<n;i++)
{
str[len++]=temp[i];
str[len++]='#';
}
memset(p,,sizeof(p));
} void Manacher()
{
Init();
int mx = , id =;
for (int i=;i<len;i++)
{
p[i] = mx>i ? min(p[*id-i],mx-i):;
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=;i<n;i++)
{
dp[i] = i+; //初值
int pos = (i+)*;
for (int j=pos;j>=;j--)
{
if(j+p[j]->=pos)
{
int pre = (j-(pos-j))/-;
if (pre==) dp[i]=;
else dp[i]= min(dp[pre-]+,dp[i]);
}
}
}
printf("%d\n",dp[n-]);
}
return ;
}

1154 回文串划分(DP+Manacher)的更多相关文章

  1. 51nod 1154 回文串划分

    1154 回文串划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有 ...

  2. 51Nod - 1154 回文串划分(最少回文串dp)

    回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式.   a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b ...

  3. 51NOD 1154 回文串的划分(DP)

    思路:参考了网上,思路很清奇,借助vis[i][j]来表示从i到j是否为回文串,回文串这边是用的双重循环来写的:dp[i]用来表示以i结尾的字符串最少的回文串有多长. #include<cstr ...

  4. 【51nod 1154】 回文串划分

    有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b|b|a|a|b ...

  5. 【GDOI2016模拟3.15】基因合成(回文串+性质+DP)

    [GDOI2016模拟3.15]基因合成 题意: 给一个目标串,要求从空串进行最少的操作次数变成目标串,操作有两种: 在串的头或尾加入一个字符. 把串复制一遍后反向接到串的末尾. 因为有回文操作,所以 ...

  6. Atcoder CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning 回文串划分

    题目链接 题意 给定一个字符串(长度\(\leq 2e5\)),将其划分成尽量少的段,使得每段内重新排列后可以成为一个回文串. 题解 分析 每段内重新排列后是一个回文串\(\rightarrow\)该 ...

  7. 关于回文串的DP问题

    问题1:插入/删除字符使得原字符串变成一个回文串且代价最小 poj 3280 Cheapest Palindrome 题意:给出一个由m中字母组成的长度为n的串,给出m种字母添加和删除花费的代价,求让 ...

  8. 回文串 --- 动态dp UVA 11584

    题目链接: https://cn.vjudge.net/problem/34398/origin 本题的大意其实很简单,就是找回文串,大致的思路如下: 1. 确定一个回文串,这里用到了自定义的chec ...

  9. poj3280 Cheapest Palindrome(回文串区间dp)

    https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以 ...

随机推荐

  1. Java8:纠结的默认方法

    [编程导论(Java)·4.3Java接口] 在[0.3.1 Java简单介绍]中,有这么一段话:"请注意:Java并不是作为教学语言设计的.世界各地的大学在讲授Java的过程中均遇到一些教 ...

  2. mac 上多版本python 共存

    Mac上自带了Python2.x的版本,有时需要使用Python3.x版本做开发,但不能删了Python2.x,可能引起系统不稳定,那么就需要安装多个版本的Python. 1.安装Python3.x版 ...

  3. mui 上拉加载更多

    看起来很简单的东西,实践过程中还是出现了很多麻烦,比如上拉时,状态条跑到了顶部,因为内容没有添加到容器中,再比如下拉的回调函数使用问题,this的传递. html实现部分: <div class ...

  4. php RSA 加密 与java加密互交,java解密

    <? php class encrypt{ var $pub_key; function redPukey() { $pubKey = "MIIDhzCCAm+gAwIBAgIGASY ...

  5. 攻克了Cocoapods Undefined symbols for architecture _OBJC_CLASS_xxxx的问题,辛苦死我了,记录下之后有空在研究

    网上找了一大包将尽3个小时没有解决,原本以为是我升级到10.10的原因,把cocoapod 重装 stackoverflow google 用尽了也不知道为啥 结果是这个样子的 编译出现这个.... ...

  6. javascript 和 jquery 博客

    http://www.cnblogs.com/starof/category/626164.html

  7. hadoop english

    for the same 同样previously 之前地overlay v. 覆盖; 镀金variable expansion 变量替换processed for 处理 entry(entries) ...

  8. chrome 一进入调试页面就会自己主动打断点

    近期在用chrome调试页面时.一刷新页面总会自己主动打断点.自己鼓捣了一下,发现 把它改为这个样子的时候就能够解决问题,即把调试面板上的第5个button从Deactivate breakpoint ...

  9. 论C++STL源代码中关于堆算法的那些事

    关于堆,我们肯定熟知的就是它排序的时间复杂度在几个排序算法里面算是比較靠上的O(nlogn)常常会拿来和高速排序和归并排序讨论,并且它还有个长处是它的空间复杂度为O(1), 可是STL中没有给我们提供 ...

  10. DM36x IPNC OSD显示中文 --- 实战篇

    通过数据准备篇,将数据准备好后,其实剩下的工作已经很简单了,通过以下几个步骤即可把一个中文显示在OSD画面上:1. 使用SWOSD_setBmpchangeWinXYPrm函数设置好OSD显示坐标位置 ...