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 }
原文地址:https://www.cnblogs.com/doubleshik/p/3495114.html