Longest Common Subsequence


Sequence 1: UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) 

Sequence 2: UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) UVA 10405  Longest Common Subsequence (动态规划 LCS) 


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

题目大意:求最长公共子序列
设d[i][j]为A1,A2...Ai和B1,B2...Bj的LCS长度,则的d[i][j]=max{d[i-1][j],d[i][j-1]},如果A[i]=B[j],d[i][j]=max{d[i][j],d[i-1][j-1]+1},边界条件是最外层为0
时间复杂度为O(nm),n、m分别为序列A、B的长度
View Code
 1 # include<stdio.h>
 2 # include<string.h>
 3 # define maxn 1005        //这样定义max函数,是不是就不用考虑a,b的类型了
 4 # define max(a,b) a>b?a:b
 5 int dp[maxn][maxn];
 6 char a[maxn],b[maxn];
 7 int main(){
 8     int lena,lenb,i,j;
 9     while(gets(a)&&gets(b)){    //题目中这里不能用scanf,只能用gets输入
10         lena=strlen(a);
11         lenb=strlen(b);
12 
13         for(i=0;i<=lena;i++)
14             for(j=0;j<=lenb;j++)
15                 dp[i][j] = 0;
16             
17             for(i=1;i<=lena;i++)
18             {
19                 for(j=1;j<=lenb;j++)
20                 {
21                     dp[i][j] = max(dp[i-1][j],dp[i][j-1]);    
22                     if(a[i-1]==b[j-1])                        
23                         dp[i][j] = max(dp[i][j] , dp[i-1][j-1] + 1);
24                 }            
25             }    
26             
27             printf("%d\n",dp[lena][lenb]);
28     }
29     return 0;
30 }

 

 

相关文章: