1006 最长公共子序列Lcs
来源:互联网 发布:淘宝店铺客服链接获取 编辑:程序博客网 时间:2024/06/11 00:09
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicba
abdkscab
Output示例
abca
动态规划,转移方程dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+ai[i]==bi[j]?1:0)
打印最长路时要根据代码仔细思考一下
#include"iostream"#include"vector"using namespace std;int dp[1007][1007]={0};string jj;int main(){ string ai,bi; int mmax=-1e9; cin>>ai>>bi; for(int i=0;i<ai.size();i++) { for(int j=0;j<bi.size();j++) { dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]); if(ai[i]==bi[j]) dp[i+1][j+1]=dp[i][j]+1; if(dp[i+1][j+1]>mmax) mmax=dp[i+1][j+1]; } } int a=ai.size()-1; int b=bi.size()-1; while(a>=0&&b>=0) { if(ai[a]==bi[b]) { jj+=ai[a]; a--; b--; } else if(dp[a+1][b]>dp[a][b+1]) b--; else a--; } for(int i=mmax-1;i>=0;i--) cout<<jj[i]; cout<<endl; return 0;}
0 0
- 1006 最长公共子序列Lcs
- 1006 最长公共子序列Lcs
- 1006 最长公共子序列Lcs
- 1006 最长公共子序列Lcs
- 1006 最长公共子序列Lcs
- LCS:最长公共子序列
- LCS---最长公共子序列
- 最长公共子序列 LCS
- LCS -- 最长公共子序列
- LCS最长公共子序列
- 最长公共子序列LCS
- LCS-最长公共子序列
- 最长公共子序列 LCS
- 最长公共子序列(LCS)
- 最长公共子序列(LCS)
- 最长公共子序列LCS
- LCS最长公共子序列
- 最长公共子序列LCS
- swift学习笔记1 操作符
- android基于tcpdump的数据包捕获完整解决方案
- 原因:思维组织
- Linux命令之ln
- ECSHOP curl 代理服务器设置(用于本地调试)
- 1006 最长公共子序列Lcs
- swift学习笔记2 字符串
- 使用Map作为缓存,提升程序运行速度
- android WebView全面总结
- Dredd
- AOJ.852 SLF 的消息记录
- PYTHON上数据储存:h5py
- log4j的使用
- 洛谷P1972:[SDOI2009]HH的项链(莫队/线段树)