51nod最长公共子序列问题
来源:互联网 发布:mac怎么设置用户名 编辑:程序博客网 时间:2024/06/05 11:07
输入
第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)
输出
输出最长的子序列,如果有多个,随意输出1个。
输入示例
abcicbaabdkscab
输出示例
abca
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char str1[1010];char str2[1010];int dp[1010][1010];int flag[1010][1010];char str3[1010];int main(){ scanf("%s%s",str1,str2); memset(dp,0,sizeof(dp)); memset(flag,0,sizeof(flag));int i,j;int len1=strlen(str1);int len2=strlen(str2);for(i=1;i<=len1;i++)for(j=1;j<=len2;j++){ if(str1[i-1]==str2[j-1]){dp[i][j]=dp[i-1][j-1]+1; flag[i][j]=1;}else{dp[i][j]=max(dp[i][j-1],dp[i-1][j]);//因为此题需要将最长公共子序列打印出来,所以需要给每一种情况标记if(dp[i][j]==dp[i][j-1])flag[i][j]=2;else if(dp[i][j]==dp[i-1][j])flag[i][j]=3;}} int m=0; while(len1>0&&len2>0) { if(flag[len1][len2]==1) { str3[m++]=str1[len1-1];//因为最长公共子序列不唯一,所以输出任意一种情况就可以了 len1--; len2--; } else if(flag[len1][len2]==2) len2--; else if(flag[len1][len2]==3) len1--; } for(i=m-1;i>=0;i--) printf("%c",str3[i]); printf("\n");}
0 1
- 51nod 最长公共子序列问题
- 51nod 最长公共子序列问题
- 51nod-最长公共子序列问题
- 51nod最长公共子序列问题
- 51nod,最长公共子序列问题
- 51NOD 最长公共子序列问题
- 51NOD-最长公共子序列问题
- LCS 51NOD 最长公共子序列问题
- 51nod最长公共子序列
- 51 nod 最长公共子序列
- 最长公共子序列Lcs 51Nod
- 最长公共子序列Lcs---51--Nod
- 【最长公共子序列】51 nod 1006 最长公共子序列Lcs
- 51nod 1006:最长公共子序列Lcs
- 51nod 最长公共子序列 (DP+回溯)
- 51Nod 1006 最长公共子序列Lcs(dp)
- 51nod动态规划入门--最长公共子序列
- 51Nod-1006-最长公共子序列Lcs
- 面向过程和面向对象的区别
- Android 沉浸式通知栏
- Android应用如何退到首页/登录页
- 博客搬家了!!!
- C 1.pass_list_check 2.某个文件中是否存在特定的字符串 3.replace
- 51nod最长公共子序列问题
- 最短路
- ajax调用controller后页面无法跳转的问题
- dialog居于底部并使得宽度占满整个屏幕宽度
- c++继承上
- Linux环境下MySQL数据库大小写区分问题
- 机房收费系统之“基本数据设定的含义“
- java中线程的同步:(互斥,协作)
- 笔记:过滤器