-
L - Common Subsequence
- POJ - 1458
- 打印序列的版本:
-
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; #define maxn 1111 #define inf 0x3f3f3f3f int len1,dp[maxn][maxn]; char str[maxn],son[maxn],s[maxn]; int len2,path[maxn][maxn]; int main() { while(~scanf("%s%s",str,son)) { len1=strlen(str); len2=strlen(son); for(int i=0; i<=len1; i++) for(int j=0; j<=len2; j++) { if(i==0||j==0) { dp[i][j]=0; continue; } dp[i][j]=max(dp[i-1][j],dp[i][j-1]); if(dp[i][j]==dp[i-1][j]) path[i][j]=1; else path[i][j]=2; if(str[i-1]==son[j-1]) { dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1); if(dp[i][j]==dp[i-1][j-1]+1) path[i][j]=3; } } int i=len1,j=len2; int p=dp[len1][len2]-1; while(i>=0&&j>=0) { if(path[i][j]==1) --i; else { if(path[i][j]==2) --j; else { s[p--]=str[i-1]; --i; --j; } } } cout<<s<<endl; printf("%d\n",dp[len1][len2]); } return 0; }
L - Common Subsequence -最长公共子序列
最新推荐文章于 2019-07-28 17:16:05 发布