Luogu

Description

爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一起旅行,他们必须走同样的路线.他们不想增加城市或改变城市顺序,所以只能从名单上删除一些城市.他们想尽可能多地参观城市.请你将他们两人的清单合成一个清单.

Input

输入的第一行包含一个整数,表示测试用例数T(T<=10).每个测试用例有两行:第一行是爱丽丝的列表,第二行是鲍伯的列表.每个列表包含1到80个小写字母.

Output

输出所有符合条件的清单,数据保证至少有一种可能的次序,但不超过1000次,按字典序输出.每个测试用例后输出一个空行.

Sol

这题的重点才不是DP,是搜索鸭QwQ. So DP求LCS就不讲了

这里要记录所有长度为ans的序列并按照字典序输出

注意到n的范围较小(1,80),所以是可以用枚举+搜索的

怎么搜呢,用到两个辅助数组,a,b

a[i][j]表示在序列1的前1到j位中,(i+'a'-1)这个字母出现的最大下标

b[i][j]表示在序列2............(同上)

dfs中就只要记录(l1,l2,l,s)表示当前序列1的长度为l1,序列2的长度为l2,待枚举的字母数是l,已经有的字符串s(就是前面枚举的字母形成的字符串鸭)

由于我是字符串白纸,所以get了关于字符串的新技能!

strint s;

s="a";s=s+'b';  //s="ab"

s='c'+s; //s="cab"

觉得好方便QwQ

Code

调了半个小时就因为把1写成i了 5555

 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define Rg register
#define il inline
#define db double
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int T,ls1,ls2,ct,a[][],b[][],f[][];
string s1,s2,d[];
il void init()
{
mem(f,);ct=;
go(i,,)
go(j,,ls1)
if(s1[j]==i+'a'-)a[i][j]=j;
else a[i][j]=a[i][j-];
go(i,,)
go(j,,ls2)
if(s2[j]==i+'a'-)b[i][j]=j;
else b[i][j]=b[i][j-];
}
il void dfs(int l1,int l2,int l,string s)
{
if(l==){d[++ct]=s;return;}
if(l1< || l2<)return;
go(i,,)
{
int t1=a[i][l1],t2=b[i][l2];
if(f[t1][t2]==l){dfs(t1-,t2-,l-,char(i+'a'-)+s);}
} }
int main()
{
T=read();//remember to init ! ! !
while(T--)
{
cin>>s1>>s2;
ls1=s1.length();ls2=s2.length();
yes(i,ls1,)s1[i]=s1[i-];
yes(i,ls2,)s2[i]=s2[i-];
init();
go(i,,ls1)
go(j,,ls2)
if(s1[i]==s2[j])f[i][j]=f[i-][j-]+;
else f[i][j]=max(f[i-][j],f[i][j-]);
dfs(ls1,ls2,f[ls1][ls2],"");
sort(d+,d+ct+);
go(i,,ct)cout<<d[i]<<endl;
}
return ;
}

随机推荐

  1. OracleSpatial函数实例

    Oracle Spatial操作geometry方法   Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_ ...

  2. 【阿里云新品发布·周刊】第13期:链路追踪 Tracing Analysis 商业化首发

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 链路追踪 Tracing Analysis 商业化首发 2019年6月12日15 ...

  3. @bzoj - 4381@ [POI2015] Odwiedziny

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵 n 个点的树,树上每条边的长度都为 1 ,第 i 个点 ...

  4. oracle用索引提高效率

    索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最 ...

  5. html--图片img

    一.图片的基本格式 当前万维网上流行的图像格式以GIF及JPEG为主,另外还有一个PNG.以下做分别介绍: 1.GIF格式:采用LZW压缩,是以压缩相同颜色的色块来减少图像大小的.(LZW压缩是一种能 ...

  6. 从浏览器的url中获取查询字符串的参数

    正则表达式: function getQuery(name){ var reg = new RegExp("(^|&)" + name + "=([^&] ...

  7. 移动端Chrome Inspect调试 (Android通过Chrome Inspect调试WebView的H5)(ios手机safari,chrome调试 windows)(如果inspect的时候,是空白)

    ios +chrome调试 引用https://segmentfault.com/a/1190000015428430 iTunes ios-webkit-debug-proxy-1.8-win64- ...

  8. error LNK2001: unresolved external symbol __imp___rt_sdiv

    这个问题搞了我 5 天(包括双休日), 我一定要记录下来. 问题描述 用 Visual Studio 2008 编译 WinCE 7 平台的应用程序,编译没问题,链接时出现了一堆 Link error ...

  9. Python--day66--模板语言之自定义mysimpletag

  10. java代码注释:单行//,多行/* */,文档注释/** */

    1.单行注释      //: //后到本行结束的所有字符会被编译器忽略; 2.多行注释     /* */: /*  */之间的所有字符会被编译器忽略 3.文档注释     /** */: 在/** ...