最长公共子序列
来源:互联网 发布:织梦pc怎么做手机网站 编辑:程序博客网 时间:2024/05/16 14:25
输入
第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)
输出
输出最长的子序列,如果有多个,随意输出1个。
输入示例
abcicbaabdkscab
输出示例
abca
dp的时候记录路径,从终点反向寻找路径即可
代码如下:
#include<stdio.h>#include<string.h>#include<cstdlib>#include <iostream>using namespace std;int dp[1005][1005];struct node{ int aa; int bb;}path[1005][1005];int main(){ char a[1005],b[1005]; while(~scanf("%s%s",a+1,b+1)) { int lena=strlen(a+1); int lenb=strlen(b+1); memset(dp,0,sizeof(dp)); int x=lena,y=lenb; for(int i=1;i<=lena;i++) { for(int j=1;j<=lenb;j++) { if(a[i]==b[j]) { dp[i][j]=dp[i-1][j-1]+1; path[i][j].aa=-1; path[i][j].bb=-1; } else { if(dp[i-1][j]>dp[i][j-1]) { dp[i][j]=dp[i-1][j]; path[i][j].aa=-1; path[i][j].bb=0; } else { dp[i][j]=dp[i][j-1]; path[i][j].aa=0; path[i][j].bb=-1; } } } } char ans[1005]; int k=0; while(x!=0&&y!=0) { if(a[x]==b[y]) { ans[k++]=a[x]; } int xx=path[x][y].aa; int yy=path[x][y].bb; x+=xx; y+=yy; } for(int i=k-1;i>=0;i--) { printf("%c",ans[i]); } printf("\n"); } return 0;}
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 图解Java单例模式内存分配
- 万能搜索神器eMule(免费无广告)下载配置与使用
- 关于viewpager的适配器pageradapter的详解
- [实验-视频过程]oracle控制文件增加减少
- js 函数function用法
- 最长公共子序列
- 浏览器兼容测试工具
- linux压缩,备份,还原
- ios 文件上传, post数据
- js中的||{}
- ABAP开发实用快捷键
- iOS SpriteKit/SceneKit/Metal浅析
- NDK测试网速
- GitHub上README.md教程