算法设计与分析——动态规划——最长公共子序列
#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);}
算法设计与分析——动态规划——最长公共子序列相关推荐
- c语言最长公共子序列,算法设计与分析/动态规划——最长公共子序列LCS及模板...
这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符 ...
- 【算法设计与分析】最长公共子序列问题 动态规划算法 超详细
最长公共子序列问题描述 注意:最长公共子序列不一定是连续序列. 例如:"ASAFAGAHAJAK"与"AAAAAAA"的最长公共子序列为:AAAAAA 公共子序 ...
- 算法设计-递归法解最长公共子序列问题 C代码
给大家推荐一个公众号:诗葵1931 里面的诗歌很美 主要功能:递归法解最长公共子序列问题 #include<stdio.h> #include<string.h> /* 递归思 ...
- 算法设计与分析-----动态规划
算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...
- 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)
最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...
- 详解动态规划最长公共子序列--JavaScript实现
前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...
- 动态规划1--最长公共子序列
动态规划1--最长公共子序列 一.动态规划 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并 综合子问题的解导出大问题的解的方法,问题求解耗时 ...
- 最长公共子序列php,动态规划(最长公共子序列LCS)
概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...
最新文章
- linux硬盘拷贝系统,教你在第二块硬盘上拷贝安装Linux系统
- 快应用quickapp快速入门教程 by五个半柠檬2
- 【转载】应读者强烈要求给出《超容易的Linux系统管理入门书》一书的主要知识点...
- abap 常用系统变量
- jackson中JSON字符串节点遍历和修改
- BaseActivity的抽取
- javascript学习-创建json对象数据,遍历
- SAP中国招聘内部顾问,工作职责是做客户项目,ABAP开发
- 模拟断电oracle数据不一致,Oracle数据库案例整理-Oracle系统运行时故障-断电导致数据文件状态变为RECOVER...
- php内嵌网页加载js,javascript 窗口加载蒙板 内嵌网页内容_javascript技巧
- 华为MDC调试工具使用介绍
- Spring官网改版后下载
- SharePoint Portal Server-管理匿名访问设置
- openSSL AES 加密引擎代码分析
- 联想G480 i3 2348M扩展内存
- 嵌入式学习(二)之SoC芯片的开发流程
- OVM-V1.3正式发布,新增三大功能 ,采用全新UI界面
- php配置环境变量方法
- AcWing 365. 圆桌骑士
- 七麦数据js爬虫(附代码)
热门文章
- 微软发招,苹果发飙,React Native躺枪
- java string转decimal_java中string转bigdecimal的例子
- 【经典回放】多种语言系列数据结构算法:二叉树(C#版)
- 【ArcGIS风暴】ArcGIS中制作GPS点位轨迹线及多边形
- Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
- Linux之dd命令详解
- linux 下删除文件夹(文件夹不为空时)
- mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】
- php文件锁解锁是删除对应的文件_软件 | 文件解锁强制删除工具 Wise Force Deleter v1.49...
- python任务调度平台 界面_分布式任务调度平台XXL-JOB