UVA10405 Longest Common SubsequenceLCS+DP
Posted tigerisland45
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA10405 Longest Common SubsequenceLCS+DP相关的知识,希望对你有一定的参考价值。
Given two sequences of characters, print the length of the longest common subsequence of both sequences.
????Sequence 1:
????Sequence 2:
????For example, the longest common subsequence of the following two sequences ‘abcdgh’ ans ‘aedfhr’ is ‘adh’ of length 3.
Input
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
Output
For each subsequent pair of input lines, output a line containing one integer number which satisfies the criteria stated above.
Sample Input
bcacbcabbaccbab
bccabccbbabacbc
a1b2c3d4e
zz1yy2xx3ww4vv
abcdgh
aedfhr
abcdefghijklmnopqrstuvwxyz
a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0
abcdefghijklmnzyxwvutsrqpo
opqrstuvwxyzabcdefghijklmn
Sample Output
11
4
3
26
14
问题链接:UVA10405 Longest Common Subsequence
问题描述:(略)
问题分析:
????动态规划问题,是一个标准模板题,套模板就可以了。
????需要注意字符串长度!
程序说明:
????需要注意,要用行读入函数gets()读入数据,不能使用格式化输入"%s%s",不然会WA。
参考链接:(略)
题记:(略)
AC的C语言程序如下:
/* UVA10405 Longest Common Subsequence */
#include <stdio.h>
#include <string.h>
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
#define N 1000
char a[N + 2], b[N + 2];
int dp[N + 1][N + 1];
int lcs(char *p, char *q)
{
memset(dp, 0, sizeof(dp));
int len1 = strlen(p + 1);
int len2 = strlen(q + 1);
int i, j;
for(i = 1; i <= len1; i++)
for(j = 1; j <= len2; j++) {
if(p[i] == q[j])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = MAX(dp[i - 1][j], dp[i][j - 1]);
}
return dp[len1][len2];
}
int main(void)
{
while(gets(a + 1), gets(b + 1))
printf("%d
", lcs(a, b));
return 0;
}
以上是关于UVA10405 Longest Common SubsequenceLCS+DP的主要内容,如果未能解决你的问题,请参考以下文章
SPOJ 1812 Longest Common Substring II
Longest Common Substring(最长公共子序列)
Leetcode 之Longest Common Prefix(34)