POJ - 1458 Common Subsequence

最长公共子序列求解问题。

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int maxn=1000;
 4 char s1[maxn],s2[maxn];
 5 int c[maxn][maxn];
 6 int main()
 7 {
 8     while(scanf("%s%s",s1,s2)!=EOF){
 9         int len1=strlen(s1),len2=strlen(s2);
10         memset(c,0,sizeof(c));
11         for(int i=len1;i>=1;i--)
12             s1[i]=s1[i-1];
13         for(int i=len2;i>=1;i--)
14             s2[i]=s2[i-1];
15         for(int i=1;i<=len1;i++)
16         for(int j=1;j<=len2;j++){
17             if(s1[i]==s2[j])
18                 c[i][j]=c[i-1][j-1]+1;
19             else if(c[i][j-1]>c[i-1][j])
20                 c[i][j]=c[i][j-1];
21             else
22                 c[i][j]=c[i-1][j];
23         }
24         printf("%d\n",c[len1][len2]);
25     }
26     return 0;
27 }
posted on 2014-07-19 00:12  BMESwimming  阅读(112)  评论(0编辑  收藏  举报