编程实践
创建时间:
字数:448
阅读:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <iostream> #include <cstdio> #include <string> #include <algorithm>
using namespace std;
static const int N =100;
int main() { freopen("in.txt","r",stdin); string s1,s2; // char s1[10],s2[10]; int k;
cin >> k; for(int i = 0; i < k; i++){ cin >> s1 >> s2; int c[N+1][N+1]; //string :: size_type m,n; int m,n; m = s1.size(); n = s2.size(); // m = strlen(s1); // n = strlen(s2); int maxl = 0; s1 = ' ' + s1; s2 = ' ' + s2; c[0][0] = 0; for(int i = 1; i <= m; i++){//注意此时是从1开始的 c[i][0] = 0; } for(int j = 1; j <= n; j++){ c[0][j] = 0; } for(int i =1; i <= m; i++){ for(int j = 1; j <= n; j++){ if(s1[i] == s2[j]){ c[i][j] = c[i-1][j-1] + 1; }else{ c[i][j] = max(c[i-1][j],c[i][j-1]); } maxl = max(maxl,c[i][j]); } }
// cout << lcs_test(s1,s2) << endl; cout << maxl<< endl;
} return 0; }
|
##
最长公共子序列
当N 设置为1000时,总是会出现莫名其妙的报错
报错提示:Process returned -1073741571 (0xC00000FD)
代表堆栈溢出,很可能的原因就是开辟的数组空间太大,
百思不得其解之后,将N改为100马上编译通过
LCS的关键代码
1 2 3 4 5 6
| for(int i = 1; i <= m; i++){//注意此时是从1开始的 c[i][0] = 0; } for(int j = 1; j <= n; j++){ c[0][j] = 0; }
|
初始化横竖两条边均为零
1 2 3 4 5 6 7 8 9 10
| for(int i =1; i <= m; i++){ for(int j = 1; j <= n; j++){ if(s1[i] == s2[j]){ c[i][j] = c[i-1][j-1] + 1; }else{ c[i][j] = max(c[i-1][j],c[i][j-1]); } maxl = max(maxl,c[i][j]); } }
|
当Xi和Yj相等时,矩阵[i][j]的值为左上角的值加一
否则,矩阵[i][j]的值为左边和上边值中的较大值
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 583614868@qq.com
文章标题:编程实践
文章字数:448
本文作者:钟帅豪
发布时间:2019-09-03, 06:52:29
最后更新:2019-09-16, 16:51:19
原始链接:http://jhshz520.github.io/2019/09/03/编程实践/
版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。