NYOJ 36--最长公共子序列【LCS】
2015-04-15 16:38
295 查看
最长公共子序列
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
输入第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
输出每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
样例输入
2 asdf adfsd 123abc abc123abc
样例输出
3 6
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int len1,len2; int dp[1100][1100]; char s1[1100],s2[1100]; int LCS(){ len1 = strlen(s1); len2 = strlen(s2); int i,j; for(i = 1; i <= len1; ++i) for(j = 1; j <= len2; ++j){ if(s1[i-1] == s2[j-1]) 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 (){ int t; scanf("%d", &t); while(t--){ memset(dp, 0, sizeof(dp)); scanf("%s%s", s1, s2); printf("%d\n", LCS()); } return 0; }
相关文章推荐
- nyoj 36 最长公共子序列【lcs&&dp】
- NYOJ 36 LCS 最长公共子序列
- nyoj36-最长公共子序列 (LCS)
- NYOJ 36 最长公共子序列 (LCS模板)
- nyoj 最长公共子序列 36 (简单LCS模板)
- NYOJ - 36 - 最长公共子序列(LCS,动态规划DP)
- nyoj 36 最长公共子序列【LCS模板】
- NYOJ 36 最长公共子序列(LCS)
- NYOJ36-最长公共子序列
- NYOJ 36 最长公共子序列
- nyoj 36 最长公共子序列(Dp)
- nyoj 36 最长公共子序列
- hdoj 1159 && nyoj 36【DP - LCS】
- nyoj 36 最长公共子序列
- NYOJ36——最长公共子序列
- nyoj_36 最长公共子序列
- NYOJ36 最长公共子序列
- NYOJ - 36:最长公共子序列
- NYOJ-36-最长公共子序列
- 文章标题 nyoj 36 最长公共子序列