poj2250

 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\n",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\n",b[i]);*/
70          m=m-1;
71          //printf("%d\n",LCS(n,m));
72          LCS(n,m);
73          print(n,m);
74          //printf("\n");
75     }
76      return 0;
77 }

18:09:13

posted on 2013-07-29 18:10  ok_boy  阅读(176)  评论(0编辑  收藏  举报

导航