51Nod- 1006 最长公共子序列Lcs(动态规划)
来源:互联网 发布:mysql编程题及答案 编辑:程序博客网 时间:2024/05/21 19:38
原题链接
1006 最长公共子序列Lcs
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注
给出两个字符串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
先使用动态规划,然后根据记录,返回寻找对应字符
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int dp[1005][1005];char a[1005],b[1005],ans[1005];int index=0;int main(){ cin>>a; getchar(); cin>>b; int lena=strlen(a); int lenb=strlen(b); //计算最长公共子序列的长度 for (int i=1;i<=lena;i++) for (int j=1;j<=lenb;j++) if (a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); //根据dp内的记录返回,寻找对应的公共字符 int i=lena,j=lenb; while(dp[i][j]) { if (dp[i][j]==dp[i-1][j]) i--; else if (dp[i][j]==dp[i][j-1]) j--; else ans[index++]=a[i-1],i--,j--; } for (int t=index-1;t>=0;t--) cout<<ans[t]; return 0;}
阅读全文
0 0
- Nod-最长公共子序列Lcs(动态规划)
- 51nod--1006 最长公共子序列Lcs (动态规划)
- 51Nod- 1006 最长公共子序列Lcs(动态规划)
- 【51Nod】1006 - 最长公共子序列Lcs(LCS)
- 51nod1006---最长公共子序列Lcs(51nod基础:动态规划)
- 51Nod 1006 最长公共子序列Lcs(dp)
- 最长公共子序列(Lcs)51NOD-1006
- 51Nod 1006 最长公共子序列Lcs(DP)
- 51NOD 1006 最长公共子序列 动态规划
- lcs最长公共子序列问题记录路径 动态规划dp 51nod教程
- 51nod 1006 最长公共子序列Lcs【LCS】
- lcs 51nod 1006 最长公共子序列Lcs
- 【动态规划】最长公共子序列LCS
- 动态规划---LCS最长公共子序列
- 动态规划-最长公共子序列【LCS】
- 动态规划-最长公共子序列(LCS)
- 动态规划-LCS最长公共子序列
- 动态规划----最长公共子序列LCS
- 【CUGBACM15级BC第32场 A】hdu 5182 PM2.5
- 1094:多输入输出练习2
- Linux 技巧:让进程在后台可靠运行的几种方法
- 深度卷积网络CNN与图像语义分割
- DrawerLayout 侧滑
- 51Nod- 1006 最长公共子序列Lcs(动态规划)
- 关于ffmpeg的一个bug长期求解答
- Elasticsearch&logstash&filebeat&kibana&x-pack搭建
- 深入理解HashSet
- [较难] UVa OJ 12174 Shuffle 滑动窗口
- decltype详解之指针类型的推断
- Jump Game II
- 学html5不得不说的html5shiv.js和pug
- Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) A—C题解