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坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
随机推荐
- JavaScript基础-对象<2>
2.浏览器环境提供对象 (1) document对象 doucument对象属性: title:文本标题.doucument.title="Welcome"; lastModifi ...
- someExperience
// 面试题1 var name = 'World'; (function () { if (typeof name==='undefined') { var name = 'jack'; conso ...
- [转]JavaScript去重的6种方法
Array.prototype.unique1 = function() { var n = []; for(var i = 0; i < this.length; i++) { if (n.i ...
- Class类文件的结构
Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件中,中间没有任何分隔符.Class文件的结构只有两种数据类型:无符号数和表.无符号数以u1.u2. ...
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- PHP 各种函数
usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_unti ...
- GDI+ 如何将图片绘制成圆形的图片
大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { ...
- asp.net发送E-mail
发送电子邮件也是项目开发当中经常用到的功能,这里我整理了一个发送电子邮件(带附件,支持多用户发送,主送.抄送)的类库,供大家参考. 先上两个实体类,用于封装成Mail对象. /// <summa ...
- DataGridView 绑定数据后修改列类型
dataGridView1.DataSource = dt; dataGridView1.Columns.RemoveAt(); //删除要被替换的列 DataGridViewLinkColumn l ...
- android实现视频图片取缩略图
取缩略图不等同于缩放图片. 缩放图片是保持不失真的情况下缩放处理,并进行平滑处理. 缩略图则不然,允许失真,目的只是取出图片的轮廓. 保存Bitmap图片 private void saveBitma ...