模板 - 最长公共子序列
来源:互联网 发布:深圳乐易网络是坑吗 编辑:程序博客网 时间:2024/06/06 17:12
最长公共子序列
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std;string str;char s1[1000], s2[1000];int dp[1000][1000], mark[1000][1000];///数据太大,dp数组变成滚动数组int LCS(){ int i, j, n, m; memset(dp,0,sizeof(dp)); n = strlen(s1); m = strlen(s2); for(i = 0; i <= n; i++) mark[i][0] = 1; for(i = 0; i <= m; i++) mark[0][i] = -1; for(i = 1; i <= n; i++) { for(j = 1; j <= m; j++) { if(s1[i-1] == s2[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; mark[i][j] = 0; } else if(dp[i-1][j] >= dp[i][j-1]) { dp[i][j] = dp[i-1][j]; mark[i][j] = 1; } else { dp[i][j] = dp[i][j-1]; mark[i][j] = -1; } } } return dp[n][m];}void SameLCS(int i,int j)///mark[i][j] == 1表示s1序列的,mark[i][j] == -1表示s2序列的{ if(!i && !j) return ; if(mark[i][j] == 0)///公共序列 { SameLCS(i-1,j-1); str += s1[i-1]; } else if(mark[i][j] == 1) SameLCS(i-1,j); else SameLCS(i,j-1);}int main(){ while(~scanf("%s %s",s1,s2)) { int ans, len1, len2; len1 = strlen(s1); len2 = strlen(s2); ans = LCS(); printf("%d\n",ans); SameLCS(len1,len2); cout << str << endl; } return 0;}
0 0
- 最长公共子序列【模板】
- 【模板】最长公共子序列
- 最长公共子序列模板
- 最长公共子序列【模板】
- 【模板】最长公共子序列
- 模板 - 最长公共子序列
- 【模板】最长公共子序列
- 【模板】最长公共子序列
- 最长公共子序列和最长递增子序列模板
- 【模板】最长公共上升子序列
- 【模板】最长递增公共子序列
- 最长公共递增子序列【模板】
- 【模板】最长递增公共子序列
- 最长公共子序列(1)--hdu1159(模板)
- [模板]求最长公共子序列
- 最长公共子序列LCS模板
- 个人模板 最长公共连续子序列
- 个人模板 最长公共子序列
- CentOS 打开mysql 3306端口
- centos如何给用户提权到root
- Unity3D 调用Android的提供的接口
- 浅谈C语言中的联合体
- R语言和Python语言访问MySQL数据库
- 模板 - 最长公共子序列
- shell正则
- Add Two Numbers
- 如何安装python gensim
- 第二章 进程管理--笔记
- spring quartz cron表达式
- iCheat IC 使用教程
- 在UIWebView中添加自定义编辑菜单 ,UIMenuController
- 用实力让情怀落地!阅兵前线指挥车同款电视TCL H8800受捧