最长公共子序列(动态规划)

news2024/10/7 9:18:25
   Time Limit: 1 Sec     Memory Limit: 128 Mb        
Description
求两个序列的最每组测试样例都为一行,两组字符串,每组不超过1000,用空格隔开。求最长公共子序列,都为小写字母。

Input
每组测试样例都为一行,两组字符串,每组不超过1000,用空格隔开。

Output
对于每个测试实例,输出最长公共子序列的长度,每个实例的输出占一行。

Sample Input
abcfbc abfcab
programming contest 
abcd mnp
Sample Output
4
2
0

该题是算法动态规划的练习题

还是按照动态规划的步骤来

先定义子问题的存储数组,按照题目问题定义即可,很明显子问题肯定是被限制在两个输入字符串a和b各自的子字符串里,因此我们定义一个二维数组dp[i][j] 为对a的子字符串[1,i] 和 对b的子字符串[1,j] 的最长公共子序列长度

然后就是划分子问题和子问题之间的关系了(得到递推方程)

case1:

a[i] == b[j] ---> dp[i][j]=dp[i-1][j-1]+1

case2:

a[i] != b[j]  dp[i][j]=max(dp[i-1][j],dp[i][j-1]) 

这里想了蛮久理解起来还是有点困难,下面是一些分析,希望能帮助理解

假设已经知道 Zk={z1,z2,…,zk} 是X={x1,x2,…,xm} 和 Y={y1,y2,…,yn} 的最长公共子序列 

,那么可以分2种情况讨论

1)如果zk = xm = yn

        那么Zk-1是Xm-1和Yn-1的最长公共子序列

2)如果xm!=yn

        1)如果 zk!=xm

                那么Zk-1是Xm-1和Yn的最长公共子序列

        2)如果zk!=yn

                那么Zk-1是Xm和Yn-1的最长公共子序列

到这里其实就可以写代码了

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

char a[1010],b[1010];
int dp[1010][1010];//定义dp[i][j]为对a的子字符串[1,i] 和 对b的子字符串[1,j] 的最长公共子序列长度 

int main(){
	while(scanf("%s %s",a,b)!=EOF){
		memset(dp,0,sizeof(dp));//初始化为0 
		int lena=strlen(a),lenb=strlen(b);
		for(int i=0;i<lena;i++){
			for(int j=0;j<lenb;j++){
				if(a[i]==b[j]){//为避免下标越界,这里的下标都+1 
					dp[i+1][j+1]=dp[i][j]+1;
				}else{
					dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
				}
			}
		}
		printf("%d\n",dp[lena][lenb]);
	}
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP快速入门03-面向对象编程

文章目录前言面向对象编程关于PHP的面向对象编程类的默认方法和属性面向对象编程示例总结前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 面向对象编程 关于PHP的面向对象编程 PHP的面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP…

OK-3399-C ADB烧录

ADB烧写 一、OK3399用户资料工具目录附带了ADB工具的资料包路径&#xff1a; 二、将其解压在C:\User目录 三、将设备通过type-c线download口与电脑相连接&#xff0c;打开命令行&#xff0c;进入解压的目录&#xff0c;查看adb是否安装成功&#xff1a; 四、安装成功后&#x…

gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT

原文&#xff1a;gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT 什么是gpt4all gpt4all是在大量干净数据上训练的一个开源聊天机器人的生态系统。它不用科学上网&#xff01;甚至可以不联网&#xff01;本地就能用&#xff0c;像这样↓&#xff1a; 如何使用&#xff…

【针对项目在线OJ系统的测试】:Junit+Selenium

目录 一、背景介绍&#xff1a; 二、导入的依赖&#xff1a; 三、测试模块1&#xff1a;index页面的测试 测试点1&#xff1a;测试"我的OJ系统这4个字是否存在" 测试点2&#xff1a;测试"题目列表"这4个字是否存在 测试点3&#xff1a;测试"编号…

设计模式(十二)之装饰器模式

文章目录什么是装饰器模式例子&#xff1a;总结什么是装饰器模式 现在有一块蛋糕&#xff0c;涂上奶油就变成了奶油蛋糕&#xff0c;如果加上草莓就是草莓奶油蛋糕&#xff0c;再加上蜡烛就变成了生日蛋糕。 程序中的对象与蛋糕十分相似。将对象类比成蛋糕&#xff0c;不断的加…

Faster-RCNN代码解读6:主要文件解读-中

Faster-RCNN代码解读6&#xff1a;主要文件解读-中 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现&#xff0c;不要多想&#xff0c;我还没有厉害到可以一个人复现所有代码。所以&#xff0c;是参考别人的代码&#xff0c;进行自己的解读。 ​ 代码来自于B站的UP主&#xff…

Qt音视频开发36-超时检测和自动重连的设计

一、前言 如果网络环境正常设备正常&#xff0c;视频监控系统一般都是按照正常运行下去&#xff0c;不会出现什么问题&#xff0c;但是实际情况会很不同&#xff0c;奇奇怪怪七七八八的问题都会出现&#xff0c;就比如网络出了问题都有很多情况&#xff08;交换机故障、网线故…

TensorFlow 1.x 深度学习秘籍:11~14

原文&#xff1a;TensorFlow 1.x Deep Learning Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

持续集成——通过docker命令安装Jenkins

一、持续集成体系介绍 1、核心价值&#xff1a; 集成自动化测试&#xff0c;减少重复劳动 尽早发现和解决缺陷,减少风险 形成有机整体&#xff0c;明确阶段交付物 2、常见集成方案 a、阶段化 为不同的构建测试套件建立不同的CI循环周期 单元测试运行时间短&#xff0c;反馈…

测试基础篇

目录软件测试的生命周期测试用例设计如何描述一个bug如何创建一个Bug案例Bug的级别Bug的生命周期测试人员和开发人员产生争执了怎么办&#xff1f;软件测试的生命周期 软件测试的生命周期&#xff1a;需求分析→测试计划→测试设计、软件开发→测试执行→测试评估 软件测试&a…

AXI DMA

PG021 AXI DMA&#xff1a;AXI Direct Memory Access AXI DMA为内存和AXI4-Stream外设之间提供了高带宽的直接内存访问&#xff0c;其可选的S/G功能可以将CPU从数据搬运任务中解放出来。 AXI DMA通过AXI4-LITE接口对寄存器做一些配置和获取 MM2S&#xff1a;MemoryMap to St…

css 盒模型

CSS 中的盒子模型包括 IE 盒子模型和标准的 W3C 盒子模型。 box-sizing(有 3 个值哦)&#xff1a;border-box,padding-box,content-box 这两种盒子模型最主要的区别就是 width 的包含范围&#xff1a; 在 标准的盒子模型中&#xff0c;width只是 content 部分&#xff08;b…

嵌入式51单片机02-独立按键系列

文章目录独立按键一. 独立按键基础知识二. 独立按键系列代码1. 独立按键控制LED&#xff08;按下灯亮&#xff0c;松开灯灭&#xff09;&#xff08;1&#xff09;仿真电路图&#xff08;2&#xff09;源代码&#xff08;3&#xff09;实验结果2. 独立按键控制LED&#xff08;按…

聚观早报|阿里云正式推出通义千问;京东零售开启5年最大组织变革

今日要闻&#xff1a;国家网信办规范生成式人工智能服务&#xff1b;阿里云正式推出通义千问&#xff1b;京东零售开启5年来最大组织变革&#xff1b;飞书将推出智能AI助手「My AI」&#xff1b;乐高将继续扩大在华零售布局国家网信办规范生成式人工智能服务 4 月 11 日&#x…

谈一谈Java的ThreadLocal

目录 先说原理&#xff1a; 再上代码&#xff1a; 运行结果&#xff1a; 先说原理&#xff1a; ThreadLocal 是一个本地线程副本变量工具类&#xff0c;它可以在每个线程中创建一个副本变量&#xff0c;每个线程可以独立地修改自己的副本变量&#xff0c;而不会影响其他线程…

【进阶C语言】自定义类型:结构体,枚举,联合

前言 作者简介&#xff1a;热爱跑步的恒川&#xff0c;正在学习C/C、Java、Python等。 本文收录于C语言进阶系列&#xff0c;本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等&#xff0c;持续更新&#xff01; 相关…

ECM8.0——CCCM相关代码

ECM8.0——CCCM相关代码概览predIntraCCCMxCccmCalcModelsxCccmApplyModelxCccmCreateLumaRefxCccmGetLumaRefBufxCccmGetLumaPuBufxCccmCalcRefAverxCccmCalcRefArea概览 函数名称函数作用predIntraCCCM总体代码&#xff0c;根据CCCM技术预测输出xCccmCalcModels计算CCCM滤波器…

Idea+maven+spring-cloud项目搭建系列--14 整合请求参数校验

前言&#xff1a;当我们在进行web 项目的开发时&#xff0c;对于前端传入的参数&#xff0c;都需要进行一些非空必填等的验证&#xff0c;然后在进行业务逻辑的处理&#xff0c;如果写一堆的if 判断很不优雅&#xff0c;那么有没有好的方式来帮忙处理&#xff0c;本文通过hiber…

光电隔离转换器 直流信号放大器 导轨安装DIN11 IPO OC系列

概述&#xff1a; 导轨安装DIN11 IPO OC系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要直流信号隔离测控的行业。此系列产品内部采用了线性光电隔离技术相…

DSP中定点与浮点运算

一、定点数及其定标 在定点DSP芯片中&#xff0c;采用的是定点数据数值运算&#xff0c;其操作数一般采用整形数来表示。一个整形数的最大表示范围由DSP芯片给定字长决定。字长越长&#xff0c;表示的范围越大&#xff0c;精度越高。 举例16位字长 每个16数位用1个符号位表示正…