URAL1635. Mnemonics and Palindromes(DP)
先初始化一下所有的回文串 再O(n*n)DP
输出路径dfs 刚开始存所有回文 ME了 后来发现用不着 改了改了OK了 数据还挺强
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 4010
#define INF 0xfffffff
int dp[N];
char s[];
int path[][],o[],q[][],k;
int g,flag,pp[];
void init()
{
int i,j;
k = strlen(s);
for(i = ; i < k ; i++)
{
int tt=;
while(i-tt>=&&i+tt<k&&s[i-tt]==s[i+tt])
{ g++;
int x1 = i-tt,x2 = i+tt;
o[x2]++;
q[x2][o[x2]] = x1;
tt++;
}
tt = ;
while(i-tt+>=&&i+tt<k&&s[i-tt+]==s[i+tt])
{
g++;
int x1 = i-tt+,x2 = i+tt;
o[x2]++;
q[x2][o[x2]] = x1;
tt++;
}
}
}
void dfs(int u,int d,int v)
{
if(flag) return ;
path[][v] = u;
path[][v] = d;
int i,j;
if(v==dp[k-])
{
for(i = dp[k-]; i > ; i--)
{
for(j = path[][i]; j <= path[][i]; j++)
printf("%c",s[j]);
printf(" ");
}
for(j = path[][]; j <= path[][]; j++)
printf("%c",s[j]);
puts("");
flag = ;
return ;
}
for(i = ; i <= o[u-] ; i++)
{
if(q[u-][i]==)
dfs(q[u-][i],u-,v+);
else
if(dp[u-]==dp[q[u-][i]-]+)
{
dfs(q[u-][i],u-,v+);
}
}
}
int main()
{
int i,j;
scanf("%s",s);
init();
for(i = ; i <= k ; i++)
dp[i] = INF;
dp[] = ;
for(i = ; i < k ;i++)
{
if(o[i])
{
for(j = ;j <= o[i] ; j++)
{
if(q[i][j]==)
{
dp[i] = ;
pp[] = i;
pp[] = q[i][j];
}
else if(dp[i]>dp[q[i][j]-]+)
{
dp[i] = dp[q[i][j]-]+;
pp[] = q[i][j];
pp[] = i;
}
}
}
}
printf("%d\n",dp[k-]);
dfs(pp[],pp[],);
return ;
}
URAL1635. Mnemonics and Palindromes(DP)的更多相关文章
- Ural 1635 Mnemonics and Palindromes(DP)
题目地址:space=1&num=1635">Ural 1635 又是输出路径的DP...连着做了好多个了. . 状态转移还是挺简单的.要先预处理出来全部的回文串,tag[i] ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- 【ARC064-F】【XSY2575】Rotated Palindromes(DP)(字符串)
Description 然而,由于小C沉迷于制作游戏,他完全忘记了自己作为国家集训队的一员,还有156道作业题等他完成.还有一天作业就要截止了,而他一题还没有做.于是他赶紧挑了一道看起来最简单的题: ...
- 【UVa】Partitioning by Palindromes(dp)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=27&page=sh ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
随机推荐
- hanoi双塔
汉诺塔,经典的递归. 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK.有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子.现在请你编 ...
- 2016/7/6 神·CPU的人类极限在哪?
额,这其实是个搞怪贴 #include<stdio.h>int main(void){ int i,k; for(i=0;;i++) { k=i+222222222; printf(&qu ...
- Word 2010巧妙绘制各种分割线的方法(图文)
引用: 使用Word编辑文档时,可能为了使某些内容醒目显示,或者为了使文档内容显示的更美观.更有层次感,需要为文档添加一些分割线,如添加下框线.插入水平线.使用特殊符号快速绘制分割线等等.在Word ...
- 策略模式(Strategey Pattern)
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 下面举个例子: 有两个具体策略,分别执行两个整型加法和减法. interface Strateg ...
- bootstrap和jQuery.Gantt的css冲突问题
bootstrap是广泛使用的一个前端框架, 而jQuery.Gantt在目前也是一个很好用的用于绘制甘特图的插件. 这次在同时使用它们时,发现甘特图显示异常,如图 不加载bootstrap. ...
- C#基础(七)——静态类与非静态类、静态成员的区别
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- google map android api v2
我在这主要列举几个需要注意的问题: 1.需要注意使用的api版本的问题,例如google map android api v1就和v2差别很大,包括申请key方面,所以在搜索资料的时候一定注意版本问题 ...
- 解决laravel中环境配置不起作用的方法
博客已经迁移到www.imyzf.com,本站不再更新,请谅解! laravel有个环境配置选项很好用,在bootstrap/start.php中,曾经百度到这里面加入域名,就可以自动选择环境 $en ...
- jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)
上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...
- 几种更新(Update语句)查询的方法【转】
正 文: 数据库更新就一种方法Update,其标准格式:Update 表名 set 字段=值 where 条件不过根据数据的来源不同,还是有所区别的: 1.从外部输入这种比较简单例:update t ...