POJ 1458 Common Subsequence 最长公共子序列 LCS
LCS
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #define clc(a,b) memset(a,b,sizeof(a)) 6 #define LL long long 7 #include<cmath> 8 using namespace std; 9 int dp[1010][1010];//表示到i-1,j-1的最长公共长度 10 int main() { 11 // freopen("in.txt","r",stdin); 12 char s1[1010],s2[1010]; 13 while(~scanf("%s %s",s1,s2)) { 14 // getchar(); 15 // scanf("%s",s2); 16 // getchar(); 17 int len1=strlen(s1); 18 int len2=strlen(s2); 19 clc(dp,0); 20 for(int i=1; i<=len1; i++) { 21 for(int j=1; j<=len2; j++) { 22 if(s1[i-1]==s2[j-1]) { 23 dp[i][j]=dp[i-1][j-1]+1; 24 } else { 25 dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 26 } 27 } 28 } 29 printf("%d\n",dp[len1][len2]); 30 } 31 return 0; 32 }