LCS 模板,但要输出具体方案,这就很毒瘤了。

神奇的预处理:fa[i][j]表示在 \(a\) 串的前 \(i\) 个字符中,字母表第 \(j\) 个字母最晚出现的位置,fb[i][j]同理。

这样我们便可以递归找路径,对于两指针的位置的字母相同就向下递归,否则用预处理数组枚举相同位置再递归。

还要按字典序输出,开个set就行了。

#include <bits/stdc++.h>
using namespace std; const int N=85;
char a[N],b[N],s[N];
int ans,f[N][N],fa[N][26],fb[N][26];
set<string> ss; void getPath(int n,int m,int len)
{
if(!len)
{
string t;
for(int i=1;i<=ans;++i) t+=s[i];
ss.insert(t); return;
}
if(!n||!m) return;
if(a[n]==b[m])
{
s[len]=a[n];
getPath(n-1,m-1,len-1);
}
else
{
for(int i=0;i<26;++i)
if(f[fa[n][i]][fb[m][i]]==len)
getPath(fa[n][i],fb[m][i],len);
}
} int main()
{
scanf("%s %s",a+1,b+1);
int n=strlen(a+1),m=strlen(b+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(a[i]==b[j]) f[i][j]=f[i-1][j-1]+1;
else f[i][j]=max(f[i-1][j],f[i][j-1]);
ans=f[n][m];
for(int i=1;i<=n;++i)
for(int j=0;j<26;++j)
fa[i][j]=a[i]!='a'+j?fa[i-1][j]:i;
for(int i=1;i<=m;++i)
for(int j=0;j<26;++j)
fb[i][j]=b[i]!='a'+j?fb[i-1][j]:i;
getPath(n,m,ans);
for(string str : ss) cout << str << endl;
return 0;
}

POJ1934 Trip 题解的更多相关文章

  1. 【题解】POJ1934 Trip (DP+记录方案)

    [题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...

  2. poj1934 Trip【线性DP】【输出方案】

    Trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3850   Accepted: 1030 Description ...

  3. [POJ1934] Trip

    问题描述 Alice and Bob want to go on holiday. Each of them has planned a route, which is a list of citie ...

  4. SPOJ33&POJ1934 Trip LCS

    题目传送门:https://www.luogu.org/problemnew/show/SP33 题目大意:给出两个字符串,求其LCS(最长公共子序列)的长度与具体方案(相同的串算作同一方案).数据组 ...

  5. $Poj1934\ Trip$ 线性$DP+$搜索

    Luogu Description 爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一 ...

  6. 常规DP专题练习

    POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...

  7. 题解 【POJ1934】 Trip

    题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...

  8. [题解] trip

    题目大意 给定一颗大小为 \(N\) 的树, \(1\)的度数不小于 \(2\) .每个点有一个颜色,要么为黑色要么为白色. 从 \(1\) 号点开始游走,计数器初始为 \(0\). 如果当前为黑点计 ...

  9. Codeforces Round #365 (Div. 2) Mishka and trip

    Mishka and trip 题意: 有n个城市,第i个城市与第i+1个城市相连,他们边的权值等于i的美丽度*i+1的美丽度,有k个首都城市,一个首都城市与每个城市都相连,求所有边的权值. 题解: ...

随机推荐

  1. 我的N年软件测试感悟

    1.前言 大家好!我是Meng前段时间,很荣幸被一合作伙伴邀请发表一篇文章,主题为"这些年,我所从事软件测试的一些感悟",正好趁着这个机会,我也好好总结一下. 2.测试培训 对于软 ...

  2. 0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想

    dfs前置知识: 递归链接:0基础算法基础学算法 第六弹 递归 - 球君 - 博客园 (cnblogs.com) dfs深度优先搜索:0基础学算法 搜索篇第一讲 深度优先搜索 - 球君 - 博客园 ( ...

  3. jd一面面经

    1.讲一下hashmap原理. 2.concurrentHashMap的原理.concurrentHashMap和hashmap有什么不同? 3.synchnized底层实现?讲讲AQS 4.sync ...

  4. NX二次开发-矩阵乘矩阵的几何意义

    函数:UF_MTX3_multiply() 或者UF_MTX3_multiply_t().推荐使用UF_MTX3_multiply() 函数说明:矩阵相乘,得到新的矩阵,如下图WCS与ABS重合,在暗 ...

  5. .Net Core with 微服务 - Consul 注册中心

    上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...

  6. PTA4-6题目集总结与归纳

    前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...

  7. 终于放弃了单调的swagger-ui了,选择了这款神器—knife4j

    knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案(在非Java项目中也提供了前端UI的增强解决方案),前身是swagger-bootstrap-ui,取名knife ...

  8. starter自动转配流程以及@Import注解使用

    本文主要内容包括三个部分,第一部分主要介绍@Import注解的三种使用方法,第二部分主要介绍自定义starter的两种形式,第三部分主要介绍Springboot自动装配Bean的大致流程,第四部分主要 ...

  9. 「10.13」毛一琛(meet in the middle)·毛二琛(DP)·毛三琛(二分+随机化???)

    A. 毛一琛 考虑到直接枚举的话时间复杂度很高,我们运用$meet\ in\ the\ middle$的思想 一般这种思想看似主要用在搜索这类算法中 发现直接枚举时间复杂度过高考虑枚举一半另一半通过其 ...

  10. Linux 常用命令 随口说

    ls cd pwd du disk usage -h -s. 文件大小 df disk free -h 磁盘占用 fdisk mount top/htop + ps + grep + wc + pki ...