51nod oj 1006 最长公共子序列【dp+前向记录求Lcs】
来源:互联网 发布:js获取多重标签属性值 编辑:程序博客网 时间:2024/06/03 22:51
题目链接:1006
最长公共子序列的长度都会求了吧???不会?请点这里 hdoj 1159 && nyoj 36【DP - LCS】 模板呦-.-
这个题又增加了一下难度-让输出最长公共子序列-.-
我们可以再求最长公共子序列的动态转换中记录每一个状态的前缀就行啦-;.-
最后通过那个前缀来找上一个状态-.-没种长度的最前一个准是最长公共子序列的中的一个字符-.-
具体请看代码-.-
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[1020][1020],head[1020][1020][2];int main(){char a[1020],b[1020],c[1020]={0},kp=0;scanf("%s%s",a,b);int n=strlen(a);int m=strlen(b);memset(dp,0,sizeof(dp));for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (a[i-1]==b[j-1]){dp[i][j]=dp[i-1][j-1]+1;head[i][j][0]=i-1;head[i][j][1]=j-1;//printf("%d %d %c %c %d 6666666\n",i,j,a[i-1],b[j-1],dp[i][j]);//printf("%d %d %d %d %d 6666666\n",i,j,head[i][j][0],head[i][j][1],dp[i][j]);}else{if (dp[i-1][j]>dp[i][j-1]){dp[i][j]=dp[i-1][j];head[i][j][0]=i-1;head[i][j][1]=j;}else{dp[i][j]=dp[i][j-1];head[i][j][0]=i;head[i][j][1]=j-1;}//printf("%d %d %d %d %d 6666666\n",i,j,head[i][j][0],head[i][j][1],dp[i][j]);}int ii=n,jj=m,ja,jb;c[dp[ii][jj]]=0;while (ii&&jj){//printf("%c %c %d %d %d\n",a[ii-1],b[jj-1],ii,jj,dp[ii][jj]);c[dp[ii][jj]-1]=a[ii-1];ja=head[ii][jj][0];jb=head[ii][jj][1];ii=ja;jj=jb;}printf("%s\n",c);return 0;}
0 0
- 51nod oj 1006 最长公共子序列【dp+前向记录求Lcs】
- 51Nod 1006 最长公共子序列Lcs(dp)
- 51Nod 1006 最长公共子序列LCS DP水题
- 51Nod 1006 最长公共子序列Lcs(DP)
- 【51Nod】1006 - 最长公共子序列Lcs(LCS)
- 51nod 1006 最长公共子序列Lcs【LCS】
- lcs 51nod 1006 最长公共子序列Lcs
- lcs最长公共子序列问题记录路径 动态规划dp 51nod教程
- LCS 求最长公共子序列 dp
- 最长公共子序列Lcs 51Nod
- 最长公共子序列Lcs---51--Nod
- 51nod 1006 1006 最长公共子序列Lcs
- 51nod 1006 最长公共子序列Lcs(基础dp)
- 51nod 1006:最长公共子序列Lcs
- 51Nod-1006-最长公共子序列Lcs
- [51nod]1006 最长公共子序列Lcs
- 51Nod 1006 - 最长公共子序列(Lcs)
- 51nod 1006 最长公共子序列Lcs
- response.setHeader()的用法
- Servlet 工作原理解析
- 心在路上
- 尼可彻斯定律
- java.se.io.13关于IO的工具包
- 51nod oj 1006 最长公共子序列【dp+前向记录求Lcs】
- <iOS>响应事件传递, nextResponder研究
- Oracle学习一
- ViewPagerIndicator的使用方法
- 万能listview的adapter
- android 毛玻璃
- java初级之5基本数据类型
- javascript关于setTimeout如何调用带参数的函数
- 当鼠标移入移出div时,触发事件(此处为图片的可见和不可见)