#include<iostream>
#include<stdio.h>
#include<string.h>
#include<bits/stdc++.h>
#define MAXLEN 50
using namespace std;void LCSlength(int m,int n,char *x,char *y,int c[][MAXLEN],int b[][MAXLEN])
{for(int i=0;i<=m;i++)//m为字符个数 {c[i][0]=0;}for(int i=1;i<=n;i++){c[0][i]=0;}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(x[i-1]==y[j-1])//因为字符串是在从第0位开始存储的{c[i][j]=c[i-1][j-1]+1;b[i][j]=1;//本算法采用1,2,3三个整形作为标记}else if(c[i-1][j]>=c[i][j-1])//这个else if关键 {c[i][j]=c[i-1][j];b[i][j]=2;}else{c[i][j]=c[i][j-1];b[i][j]=3;}}}
}void LCS(int i,int j,char *x,int b[][MAXLEN])
{if(i==0||j==0){return;}if(b[i][j]==1){LCS(i-1,j-1,x,b);cout<<x[i-1]<<" ";}else if(b[i][j]==2)//这个else if 很关键 {LCS(i-1,j,x,b); }else{LCS(i,j-1,x,b);}}
int main()
{char x[MAXLEN] = {"*abcbdab"};char y[MAXLEN] = {"*bdcdba"};
//传递二维数组必须知道列数,所以使用MAXLEN这个确定的数int  b[MAXLEN][MAXLEN];//b矩阵是用来存储这个问题是由那个子问题来解决的                       int  c[MAXLEN][MAXLEN];//c矩阵用来存储最长公共子串的长度 int m, n;m = strlen(x);// cout<<m<<endl;n = strlen(y);//cout<<n<<endl;LCSlength(m,n,x,y,c,b);cout<<"b矩阵是用来存储这个问题是由那个子问题来解决的"<<endl; for(int i=0;i<=m;i++){for(int j=0;j<=n;j++){cout<<b[i][j];}cout<<endl;} cout<<"c矩阵用来存储最长公共子串的长度 "<<endl;for(int i=0;i<=m;i++){for(int j=0;j<=n;j++){cout<<c[i][j];}cout<<endl;} LCS(m,n,x,b);}

算法设计与分析——动态规划——最长公共子序列相关推荐

  1. c语言最长公共子序列,算法设计与分析/动态规划——最长公共子序列LCS及模板...

    这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符 ...

  2. 【算法设计与分析】最长公共子序列问题 动态规划算法 超详细

    最长公共子序列问题描述 注意:最长公共子序列不一定是连续序列. 例如:"ASAFAGAHAJAK"与"AAAAAAA"的最长公共子序列为:AAAAAA 公共子序 ...

  3. 算法设计-递归法解最长公共子序列问题 C代码

    给大家推荐一个公众号:诗葵1931 里面的诗歌很美 主要功能:递归法解最长公共子序列问题 #include<stdio.h> #include<string.h> /* 递归思 ...

  4. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  5. 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)

    最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...

  6. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

  7. 动态规划1--最长公共子序列

    动态规划1--最长公共子序列 一.动态规划 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并 综合子问题的解导出大问题的解的方法,问题求解耗时 ...

  8. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  9. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

最新文章

  1. linux硬盘拷贝系统,教你在第二块硬盘上拷贝安装Linux系统
  2. 快应用quickapp快速入门教程 by五个半柠檬2
  3. 【转载】应读者强烈要求给出《超容易的Linux系统管理入门书》一书的主要知识点...
  4. abap 常用系统变量
  5. jackson中JSON字符串节点遍历和修改
  6. BaseActivity的抽取
  7. javascript学习-创建json对象数据,遍历
  8. SAP中国招聘内部顾问,工作职责是做客户项目,ABAP开发
  9. 模拟断电oracle数据不一致,Oracle数据库案例整理-Oracle系统运行时故障-断电导致数据文件状态变为RECOVER...
  10. php内嵌网页加载js,javascript 窗口加载蒙板 内嵌网页内容_javascript技巧
  11. 华为MDC调试工具使用介绍
  12. Spring官网改版后下载
  13. SharePoint Portal Server-管理匿名访问设置
  14. openSSL AES 加密引擎代码分析
  15. 联想G480 i3 2348M扩展内存
  16. 嵌入式学习(二)之SoC芯片的开发流程
  17. OVM-V1.3正式发布,新增三大功能 ,采用全新UI界面
  18. php配置环境变量方法
  19. AcWing 365. 圆桌骑士
  20. 七麦数据js爬虫(附代码)

热门文章

  1. 微软发招,苹果发飙,React Native躺枪
  2. java string转decimal_java中string转bigdecimal的例子
  3. 【经典回放】多种语言系列数据结构算法:二叉树(C#版)
  4. 【ArcGIS风暴】ArcGIS中制作GPS点位轨迹线及多边形
  5. Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
  6. Linux之dd命令详解
  7. linux 下删除文件夹(文件夹不为空时)
  8. mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】
  9. php文件锁解锁是删除对应的文件_软件 | 文件解锁强制删除工具 Wise Force Deleter v1.49...
  10. python任务调度平台 界面_分布式任务调度平台XXL-JOB