//根据LCS的最优子结构定理可得转移方程 /* 0 i == 0 || j == 0 len[i][j] = len[i - 1][j - 1] + 1 s1[i] == s2[j] max(len[i - 1][j], len[i][j - 1]) s1[i] != s2[j] */ #include <iostream> #include <cstring> #include <algorithm> #include <string> using namespace std; int len[1000][1000]; string s1, s2; int main() { //freopen("1.txt", "r", stdin); while(cin >> s1 >> s2) { memset(len, 0, sizeof(len)); for(int i = 1; i <= s1.size(); i++) { for(int j = 1; j <= s2.size(); j++){ if(s1[i - 1] == s2[j - 1]) len[i][j] = len[i - 1][j - 1] + 1; else len[i][j] = max(len[i - 1][j], len[i][j - 1]); } } cout << len[s1.size()][s2.size()] << endl; } return 0; }
hdoj 1159 Common Subsequence
最新推荐文章于 2018-11-18 14:42:38 发布
本文介绍了一个基于动态规划的最长公共子序列(LCS)算法实现,通过两个字符串作为输入,输出它们之间的最长公共子序列长度。该算法使用二维数组存储中间结果,并通过迭代填充数组来找到解决方案。
490

被折叠的 条评论
为什么被折叠?



