51nod_1006 最长公共子序列,输出路径【DP】
2024-10-19 23:24:11
题意:
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
输出最长的子序列,如果有多个,随意输出1个。
思路:
DP,同时DP记录路径。
代码:
string a,b;
int f[1005][1005];
int path[1005][1005]; void _print(int x,int y){
if(!x||!y) ret; int t=path[x][y];
if(!t)
_print(x-1,y-1);
else if(t<0)
_print(x-1,y);
else
_print(x,y-1);
if(!t) print("%c",a[x-1]);
} int main(){ cin>>a>>b;
int la=a.length(), lb=b.length();
mem(f,0);
mem(path,0); rep(i,1,la) rep(j,1,lb){
f[i][j]=max( f[i-1][j],f[i][j-1] );
if(f[i-1][j]>f[i][j-1]){
f[i][j]=f[i-1][j];
path[i][j]=-1;
}
else{
f[i][j]=f[i][j-1];
path[i][j]=1;
}
if(a[i-1]==b[j-1]){
if(f[i-1][j-1]+1>f[i][j]){
f[i][j]=f[i-1][j-1]+1;
path[i][j]=0;
}
}
}
_print(la,lb); cout<<endl; return 0;
}
最新文章
- web前端学习部落22群 明白何谓Margin Collapse
- HSV
- 【BZOJ】【3280】小R的烦恼
- 关于html水平垂直居中的一些总结吧
- 以太坊挖矿源码:clique算法
- 简历HTML网页版
- thinkphp 迁移数据库 -Phinx 简单说明文档
- MongoDB exception:connection failed
- 安装redis报错 you need tcl 8.5 or newer in order to run redis test
- Java并发编程-ReentrantReadWriteLock
- Testing - 软件测试知识梳理 - 自动化测试
- java 华容道 迷弟版(向 xd-女神 吴嘉欣致敬)
- 开源|如何使用CNN将视频从2D到3D进行自动转换(附源代码)
- Rspec: feature spec 功能测试 测试JavaScript.
- 模拟QQ分组
- linux一键安装php环境
- Why we should overwrite the hashCode() when we overwrite the equals()
- CentOS 7中为Yum设置代理
- mariadb/mysql使用Navicat连接报错
- hdu 4559 涂色游戏(SG)