Nod-最长公共子序列Lcs(动态规划)
2017-07-06 15:00
225 查看
1006 最长公共子序列Lcs
![](http://file.51nod.com/images/icon/ok.png)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
![](http://file.51nod.com/images/icon/star.png)
收藏
![](http://file.51nod.com/images/icon/plus.png)
关注
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
Output
Input示例
Output示例
![](http://file.51nod.com/images/icon/ok.png)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
![](http://file.51nod.com/images/icon/star.png)
收藏
![](http://file.51nod.com/images/icon/plus.png)
关注
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicba abdkscab
Output示例
//AC代码 #include <iostream> #include <stdio.h> #include <string.h> using namespace std; int dp[1005][1005];//dp[i][j] 表示s1串前i个和s2串前j个字符的最大值 int max(int a,int b,int c)//之前没有对三个数求最大值进行重载导致一直错误 { if(a>=b&&a>=c) return a; else if(b>=a&&b>=c) return b; else return c; } int main() { char s1[1005]; char s2[1005]; scanf("%s %s",s1+1,s2+1); memset(dp,0,sizeof(dp)); char ch[1005]; int i,j; for(i=1;s1[i];i++) for(j=1;s2[j];j++) { dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+(s1[i]==s2[j]? 1 : 0));//状态转移方程 } i--; j--; int imax=dp[i][j]; int k=imax; while(i>0&&j>0) { if(s1[i]==s2[j]) { ch[imax--]=s1[i]; i--; j--; } else { if(dp[i][j-1]>dp[i-1][j])//寻找原来的轨迹 { j--; } else{ i--; } } } for(int i=1;i<=k;i++) { printf("%c",ch[i]); } printf("\n"); return 0; }
相关文章推荐
- 51nod1006---最长公共子序列Lcs(51nod基础:动态规划)
- 动态规划求最长公共子序列LCS
- 动态规划-最长公共子序列LCS
- 动态规划求解最长公共子序列(LCS)
- Dynamic Programming longest common subsequence(LCS) 动态规划之最长公共子序列
- 51Nod- 1006 最长公共子序列Lcs(动态规划)
- 51 nod 1006 最长公共子序列Lcs
- 动态规划 最长公共子序列 LCS,最长单独递增子序列,最长公共子串
- 动态规划 - 最长公共子序列(LCS)
- 动态规划——最长公共子序列(LCS)&最长递增子序列(LIS)
- 0011算法笔记——【动态规划】最长公共子序列问题(LCS)
- [动态规划] [LCS算法] 最长公共子序列 longest common subsequence
- 【51NOD】1006 最长公共子序列Lcs(动态规划)
- 动态规划——最长公共子序列(LCS)
- 动态规划-最长公共子序列【LCS】
- 动态规划--最长公共子序列(LCS).九度1042
- 自顶向下动态规划解决最长公共子序列(LCS)问题
- 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)
- 编程练习-动态规划(最长公共子序列LCS)