uva10405 Longest Common Subsequence(最长公共序列)
标题就说明了方法 。。 典型的dp
题目:
Problem C: Longest Common Subsequence
Sequence 1:
Sequence 2:
Given two sequences of characters, print the
length of the longest common subsequence of both sequences. For
example, the longest common subsequence of the following two
sequences:
abcdgh aedfhr
is adh of length 3.
Input consists of pairs of lines. The first line of a pair contains the first string and the second line contains the second string. Each string is on a separate line and consists of at most 1,000 characters
For each subsequent pair of input lines, output a line containing one integer number which satisfies the criteria stated above.
Sample input
a1b2c3d4e zz1yy2xx3ww4vv abcdgh aedfhr abcdefghijklmnopqrstuvwxyz a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0 abcdefghijklmnzyxwvutsrqpo opqrstuvwxyzabcdefghijklmn
Output for the sample input
4 3 26 14
代码:
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 char str1[2000]; 7 char str2[2000]; 8 int d[2000][2000]; 9 int main() 10 { 11 while(gets(str1)) 12 { 13 gets(str2); 14 int len1= strlen(str1); 15 int len2= strlen(str2); 16 17 for(int i=1;i<=len1;i++) 18 { 19 for(int j=1;j<=len2;j++) 20 { 21 if(str1[i-1]== str2[j-1]) 22 { 23 d[i][j] = d[i-1][j-1]+1; 24 } 25 else 26 { 27 d[i][j] = max (d[i-1][j],d[i][j-1]); 28 } 29 } 30 31 } 32 cout<<d[len1][len2]<<endl; 33 memset(d,0,sizeof(d)); 34 } 35 36 37 return 0; 38 }