hdu 1503(最长公共子序列的升级版)
来源:互联网 发布:python def的作用 编辑:程序博客网 时间:2024/05/29 03:04
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503
思路:如何求最长公共子序列就不说了,另外如果有str2[j]==str1[i],那就mark[i]=j,相当于一个标记。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 111 7 int dp[MAXN][MAXN]; 8 char str1[MAXN],str2[MAXN]; 9 int mark[MAXN];10 int path[MAXN][MAXN];11 int len1,len2;12 13 int main(){14 while(~scanf("%s%s",str1,str2)){15 len1=strlen(str1);16 len2=strlen(str2);17 memset(dp,0,sizeof(dp));18 memset(path,0,sizeof(path));19 memset(mark,-1,sizeof(mark));20 for(int i=1;i<=len1;i++){21 for(int j=1;j<=len2;j++){22 if(str1[i-1]==str2[j-1]){23 dp[i][j]=dp[i-1][j-1]+1;24 }else if(dp[i-1][j]>dp[i][j-1]){25 dp[i][j]=dp[i-1][j];26 path[i][j]=1;27 }else {28 dp[i][j]=dp[i][j-1];29 path[i][j]=2;30 }31 }32 }33 for(int i=len1,j=len2;i>=1&&j>=1;){34 if(path[i][j]==0){35 i--,j--;36 mark[i]=j;37 }else if(path[i][j]==1){38 i--;39 }else 40 j--;41 }42 int k=0;43 for(int i=0;i<len1;i++){44 if(mark[i]==-1){45 printf("%c",str1[i]);46 }else {47 for(int j=k;j<=mark[i];j++){48 printf("%c",str2[j]);49 }50 k=mark[i]+1;51 }52 }53 for(int j=k;j<len2;j++)printf("%c",str2[j]);54 puts("");55 }56 return 0;57 }58 59 60 61 62 63
0 0
- hdu 1503(最长公共子序列的升级版)
- hdu 1503 最长公共子序列
- hdu 1503 最长公共子序列变型
- hdu 1159 (最长公共子序列)
- hdu 1159(最长公共子序列)
- hdu 1159(最长公共子序列)
- HDU-1503(最长公共子序列加强版)
- HDU-1503(最长公共子序列+路径跟踪)
- HDU 1503 Advanced Fruits (LCS最长公共子序列)
- HDU 1503 最长公共子序列的变形(重点在输出)
- hdu 1503 Advanced Fruits(最长公共子序列的应用)
- Java版的最长公共子序列
- HDU 1503 最长公共子序列问题---加强版(路径打印)dp
- 最长的公共子序列
- UVA - 10723 Cyborg Genes 最长公共子序列的升级版
- hdu 5795 最长公共子序列的应用-----公共子序列的个数
- 最长公共子序列 最长递增子序列(和) 最长递增公共子序列 最长(连续)子序列乘积(HDU)--dp
- hdu 1513 使用滚动数组的最长公共子序列
- dp
- hdu 1544(求回文子串的个数)
- 数位dp
- hdu 4526
- hdu 3535(背包综合题)
- hdu 1503(最长公共子序列的升级版)
- hdu 1300
- hdu 1422(环上最长连续子序列)
- hdu 4528(bfs)
- hdu 3832(最短路)
- hdu 3631(floyd思想的运用)
- hdu 3873(有节点保护的最短路)
- hdu 2648(map简单应用)
- 《学习opencv》笔记——基本数据结构,CvMat,矩阵访问