POJ1934 Trip 题解
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 题解的更多相关文章
- 【题解】POJ1934 Trip (DP+记录方案)
[题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...
- poj1934 Trip【线性DP】【输出方案】
Trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3850 Accepted: 1030 Description ...
- [POJ1934] Trip
问题描述 Alice and Bob want to go on holiday. Each of them has planned a route, which is a list of citie ...
- SPOJ33&POJ1934 Trip LCS
题目传送门:https://www.luogu.org/problemnew/show/SP33 题目大意:给出两个字符串,求其LCS(最长公共子序列)的长度与具体方案(相同的串算作同一方案).数据组 ...
- $Poj1934\ Trip$ 线性$DP+$搜索
Luogu Description 爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一 ...
- 常规DP专题练习
POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...
- 题解 【POJ1934】 Trip
题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...
- [题解] trip
题目大意 给定一颗大小为 \(N\) 的树, \(1\)的度数不小于 \(2\) .每个点有一个颜色,要么为黑色要么为白色. 从 \(1\) 号点开始游走,计数器初始为 \(0\). 如果当前为黑点计 ...
- Codeforces Round #365 (Div. 2) Mishka and trip
Mishka and trip 题意: 有n个城市,第i个城市与第i+1个城市相连,他们边的权值等于i的美丽度*i+1的美丽度,有k个首都城市,一个首都城市与每个城市都相连,求所有边的权值. 题解: ...
随机推荐
- 【Python报错】RuntimeError: DataLoader worker (pid(s) 9764, 15128) exited unexpectedly
batch_size = 2# 256 def get_dataloader_workers(): #@save """使用4个进程来读取数据.""& ...
- 八、Nginx的TCP/UDP调度器
nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...
- 【NX二次开发】Block UI 切换开关
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- mybatis自定义打印执行时间并格式化sql插件
打印SQL的执行时间,我们可以实现mybatis官方我们提供的接口org.apache.ibatis.plugin.Interceptor,我们可以拦截的类有多个Executor,StatementH ...
- 【模拟8.01】big(trie树)
一道trie树的好题 首先我们发现后手对x的操作就是将x左移一位,溢出位在末尾补全 那么我们也可以理解为现将初值进行该操作,再将前i个元素异或和进行操作,与上等同. 那么我们等于转化了问题: ...
- Mysql优化(出自官方文档) - 第二篇
Mysql优化(出自官方文档) - 第二篇 目录 Mysql优化(出自官方文档) - 第二篇 1 关于Nested Loop Join的相关知识 1.1 相关概念和算法 1.2 一些优化 1 关于Ne ...
- ANDROID开发之GC_CONCURRENT freed
<GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause ...
- C#获取字符串字符的位数(区分中文和英文长度)
请看以下代码 1 private static int GetStrLength(string str) 2 { 3 if (string.IsNullOrEmpty(str)) return 0; ...
- gitlab 设置分支保护功能及取消分支保护
使用gitlab管理员账户登录gitlab系统 进入需要分支保护的项目 进行分支保护设置 保护开发分支策略配置 保护RC送测库分支策略配置 调整分支保护策略 效果展示 取消分支保护 效果展示
- centos8添加中文语言包
centos8添加中文语言包 系统:centos8 查看: [root@centos8]# locale -a 不支持中文包,按照centos7的方式安装:yum install kde-l10n-C ...