1 #include<string.h> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<vector> 5 #include<string> 6 using namespace std; 7 char a[1010][35],b[1010][35]; 8 int dir[1000][1000],dp[1000][1000]; 9 int LCS(int n,int m) 10 { 11 int i,j; 12 for(i=1;i<=n;i++)//为了方便从1开始但是下面的i-1对正下标 13 for(j=1;j<=m;j++) 14 { 15 if(strcmp(a[i-1],b[j-1])==0) 16 { 17 dp[i][j]=dp[i-1][j-1]+1; 18 dir[i][j]=1; 19 } 20 else if(dp[i-1][j]>=dp[i][j-1]) 21 { 22 dp[i][j]=dp[i-1][j]; 23 dir[i][j]=0; 24 } 25 else 26 { 27 dp[i][j]=dp[i][j-1]; 28 dir[i][j]=2; 29 } 30 } 31 return dp[n][m]; 32 } 33 void print(int r,int c) 34 { 35 if(r==0 || c==0) return; 36 if(dir[r][c]==1) 37 { 38 print(r-1,c-1); 39 printf("%s ",a[r-1]); 40 } 41 else if(dir[r][c]==0) print(r-1,c); 42 else print(r,c-1); 43 } 44 int main() 45 { 46 int i,n,m; 47 char s[40]; 48 while(scanf("%s",&s)!=EOF) 49 { 50 n=0; 51 int flag=1; 52 strcpy(a[n++],s); 53 while(flag) 54 { 55 scanf("%s",a[n++]); 56 if(a[n-1][0]=='#') flag=0; 57 } 58 /*for(i=0;i<n;i++) 59 printf("%s ",a[i]);*/ 60 n=n-1; 61 flag=1; 62 m=0; 63 while(flag) 64 { 65 scanf("%s",b[m++]); 66 if(b[m-1][0]=='#') flag=0; 67 } 68 /*for(i=0;i<m;i++) 69 printf("%s ",b[i]);*/ 70 m=m-1; 71 //printf("%d ",LCS(n,m)); 72 LCS(n,m); 73 print(n,m); 74 //printf(" "); 75 } 76 return 0; 77 }
18:09:13