题意:将一个字符串分割成最少的字符串,使得分割出的每个字符串都是回文串。输出最小的分割数。

方法(自己的):先O(n^2)(用某个点或某个空区间开始,每次向左右扩展各一个的方法)处理出所有子串是否回文。然后常规区间dp,ans[i][j]表示i到j的子串的最小划分数。如果i到j的子串本身为回文串,那么ans[i][j]为1,否则枚举所有方案将i到j划分为两个区间,取所有两个区间结果之和的最小值。

方法(其他,大概就是压了一下空间,压了一下时间的常数):http://blog.csdn.net/l123012013048/article/details/49475845

解题思路:用dp[i]表示前i个字符划分成回文串,需要划分成多少个部分 
接着枚举j,如果[i,j]回文,那么dp[i] = min(dp[i], dp[j - 1] + 1)

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool ok[][];
char s[];
int T,TT,len,ans[][];
int get(int l,int r)
{
if(ans[l][r]) return ans[l][r];
if(l==r) return ;
if(ok[l][r]) return ans[l][r]=;
int anss=0x3f3f3f3f,i;
for(i=l;i<r;i++)
if(ok[l][i])
anss=min(anss,get(i+,r)+);
return ans[l][r]=anss;
}
int main()
{
int i,l,r;
bool now;
scanf("%d",&T);
for(TT=;TT<=T;TT++)
{
scanf("%s",s+);
len=strlen(s+);
memset(ans,,sizeof(ans));
for(i=;i<=len;i++)
for(l=i,r=i,now=;l>=&&r<=len;l--,r++)
{
if(s[l]!=s[r]) now=;
ok[l][r]=now;
}
for(i=;i<len;i++)
for(l=i,r=i+,now=;l>=&&r<=len;l--,r++)
{
if(s[l]!=s[r]) now=;
ok[l][r]=now;
}
printf("Case %d: %d\n",TT,get(,len));
}
return ;
}

Palindrome Partitioning LightOJ - 1044(回文串最小分割数,O(n^2)预处理子串是否回文)的更多相关文章

  1. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  2. LightOJ 1044 Palindrome Partitioning(简单字符串DP)

    A palindrome partition is the partitioning of a string such that each separate substring is a palind ...

  3. lintcode :Valid Palindrome 有效回文串

    题目: 有效回文串 给定一个字符串,判断其是否为一个回文串.只包含字母和数字,忽略大小写. 样例 "A man, a plan, a canal: Panama" 是一个回文. & ...

  4. 最长连续回文串(最优线性时间O(n))

    转自:http://blog.csdn.net/hopeztm/article/details/7932245 Given a string S, find the longest palindrom ...

  5. BZOJ 3676 回文串

    Description 考虑一个只包含小写拉丁字母的字符串\(s\).我们定义\(s\)的一个子串\(t\)的"出现值"为\(t\)在\(s\)中的出现次数乘以\(t\)的长度.请 ...

  6. lintcode-415-有效回文串

    415-有效回文串 给定一个字符串,判断其是否为一个回文串.只包含字母和数字,忽略大小写. 注意事项 你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题. 在这个题目中,我们将 ...

  7. P4555 【[国家集训队]最长双回文串】

    不知道有没有人跟我一样数据结构学傻了 首先这道题是要求回文串,那么我们可以想到manacher算法 但由于\(manacher\)不能求出双回文子串,我们要考虑一些性质 首先对于一个回文串,删掉两边的 ...

  8. 132. 分割回文串 II

    Q: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: “aab” 输出: 1 解释: 进行一次分割就可将 s 分割成 [“aa”,“b ...

  9. HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)

    原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...

随机推荐

  1. mysql创建 存储过程 并通过java程序调用该存储过程

    create table users_ning(id primary key auto_increment,pwd int); insert into users_ning values(id,123 ...

  2. Preference+PreferenceArray+DataModel

    在Mahout中,用户的喜好被抽象为一个Preference,包含了userId,itemId和偏好值(user对item的偏好).Preference是一个接口,它有一个通用的实现是GenericP ...

  3. $.ajax 使用详解

    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作. $.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() ...

  4. 使用Qt发送HTTPS请求

    示例代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QNetworkAc ...

  5. 最短路Dijkstra算法的一些扩展问题

    最短路Dijkstra算法的一些扩展问题     很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...

  6. codeforces 433C. Ryouko's Memory Note 解题报告

    题目链接:http://codeforces.com/problemset/problem/433/C 题目意思:一本书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么| ...

  7. nginx最简单的网站配置:单主机+静态文件

    1.域名绑定主机:新建一个A记录,将www的子域名绑定到主机的ip上:2.主机的nginx设置监听端口,绑定域名,修改网站根目录路径和默认首选文件:/etc/nginx/conf.d 这个目录中新建一 ...

  8. HDU 1711(KMP)字符串匹配

    链接  HDU 1711 Number Sequence KMP 算法 我以自己理解写的,写的不对,不明白的地方海王子出来,一起共同学习: 字符串匹配 就是KMP,一般思想,用一个for循环找开头   ...

  9. I.MX6 eMMC分区挂载

    /********************************************************************* * I.MX6 eMMC分区挂载 * 说明: * 如果想要 ...

  10. 纯CSS画WP8界面

    我的手机是诺基亚920,13年4月份买的.工作之余,就想用css做一下WP8的界面效果,如上图所示.不做不知道,一做还挺难的.尤其是画那个QQ 的企鹅图标,太难画了.怎么画都不像. <!doct ...