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

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04 编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017) 阅读详情

题目描述:

在这里插入图片描述


解题思路:

这题可以用暴搜枚举每一种可能,找出最优解,然后愉快超时。
分析题目,长度为 n n n 的两个序列的最长公共子序列长度必然源于长度 n − 1 n-1 n−1 的两个序列的最长公共子序列长度,因此可以判断该问题具有最优子结构性,考虑动态规划。

这道题需要用到一种非常经典的线性DP,公共子序列DP。
俗话说得好,几乎每一种模板类型的DP的推出都离不开建模(就是画图!),而分析DP的办法最好就是打表,因此,在我们完全不知道DP方程的情况下,我们可以出一个小一点的数据,尝试打个表,自己推出DP

设这题数据为:
序列X为      2      4      6      7 \ \ \ \ 2\ \ \ \ 4\ \ \ \ 6\ \ \ \ 7     2    4    6    7
序列Y为      2      3      4      7 \ \ \ \ 2\ \ \ \ 3\ \ \ \ 4\ \ \ \ 7     2    3    4    7
把不同长度情况下序列的最长公共子序列的长度列出来:
在这里插入图片描述
先不说啥,设定状态,我们用 d p i , j dp_{i,j} dpi,j​ 表示表格中第 i i i 行第 j j j 列的数,其中, d p i , j dp_{i,j} dpi,j​ 表示从 X 序列的第 i i i 个到 Y 序列的第 j j j 个之间的最长公共子序列的长度。

我们用DP的思维方式来模拟填表过程。
首先看到 X 1 X_1 X1​ 和 Y 1 Y_1 Y1​,相等。很明显,由于 X 1 X_1 X1​ 和 Y 1 Y_1 Y1​ 的相等, d p 1 , 1 dp_{1,1} dp1,1​ 很明显就等于1,意味着在 X 1 − 1 X_{1-1} X1−1​ 和 Y 1 − 1 Y_{1-1} Y1−1​ 这个区间内,由于元素的相等,使得公共子序列长度增加了1。

但是这样这太肤浅了,我们需要明白的是——这里是怎么变成 1 的。

还记得,我们上文说该问题具有最优子结构性。没错,这就是问题解决的关键。众所周知,任何具有最优子结构性问题的最优解,都是在子问题的最优解之上得来的。,明白了这个定义,我们就能明白图中的 d p 1 , 1 dp_{1,1} dp1,1​ 是怎么得出来的。

最长公共子序列具有最优子结构性质,设序列 X = X 1 , X 2 , … … X m X={ X_1,X_2, ……X_m } X=X1​,X2​,……Xm​, Y = Y 1 , Y 2 … … , Y n Y={Y_1,Y_2……,Y_n} Y=Y1​,Y2​……,Yn​ 的最长公共子序列为 Z = Z 1 , Z 2 … … Z k Z={Z_1,Z_2……Z_k} Z=Z1​,Z2​……Zk​

若 X m = Y n X_m=Y_n Xm​=Yn​,则 Z k = X m = Y n Z_k=X_m=Y_n Zk​=Xm​=Yn​,且 Z k − 1 Z_k-1 Zk​−1 是 X m − 1 X_m-1 Xm​−1 和 Y n − 1 Y_n-1 Yn​−1 的最长公共子序列,因此 d p m , n = d p m − 1 , n − 1 + 1 dp_{m,n}=dp_{m-1,n-1}+1 dpm,n​=dpm−1,n−1​+1
若 X m   ! = Y n X_m\ !=Y_n Xm​ !=Yn​,则 d p m , n = m a x ( d p m − 1 , n   ,   d p m , n − 1 ) dp_{m,n}=max(dp_{m-1,n}\ ,\ dp_{m,n-1}) dpm,n​=max(dpm−1,n​ , dpm,n−1​)。
再简单一点,按表格的形式来说,就是如果 X m = Y n X_m=Y_n Xm​=Yn​,那么 d p m , n dp_{m,n} dpm,n​ 等于表格中左上角的数 +1,否则等于表格左边和表格上面中稍大的数。

固有状态转移方程:
若 X m = Y n X_m=Y_n Xm​=Yn​, d p m , n = d p m − 1 , n − 1 + 1 dp_{m,n}=dp_{m-1,n-1}+1 dpm,n​=dpm−1,n−1​+1
否则 d p m , n = m a x ( d p m − 1 , n   ,   d p m , n − 1 ) dp_{m,n}=max(dp_{m-1,n}\ ,\ dp_{m,n-1}) dpm,n​=max(dpm−1,n​ , dpm,n−1​)

CODE:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
string str1,str2;
char a[1001],b[1001];
int dp[1001][1001]={0},ans=0;
void input()
{
	cin>>str1>>str2;
	for(int i=0;i<str1.size();i++)
	  a[i+1]=str1[i];
	for(int i=0;i<str2.size();i++)
	  b[i+1]=str2[i];
}

void DP()
{
	for(int i=1;i<=str1.size();i++)
	  {
	  	for(int j=1;j<=str2.size();j++)
	  	  {
	  	  	if(a[i]==b[j])
	  	  	  dp[i][j]=dp[i-1][j-1]+1;
	  	  	else
	  	  	  {
	  	  	    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);	
			  }
			ans=max(ans,dp[i][j]);
		  }
	  }
	cout<<ans;
}

int main()
{
	input();
	DP();
	return 0;
} 

总结:

DP的方程分析应该从子问题考虑。

能在鄙人这里得到一丁点启发的朋友们,欢迎留下你们的支持!!:)

如果你喜欢我的内容,那么也请支持一下他吧

解析vCard 3.0:提取电子名片中的姓名 N:LastName;FirstName;;;END:VCARD和END:VCARD标记数据块的开始和结束。N字段存储结构化姓名(分号分隔)。FN字段为直接可读的显示名称。其他字段如TELEMAIL等保存联系信息。 阅读详情

相关推荐

VSCode配置C/C++开发环境:从零安装MinGW-w64并运行第一个C程序

在Windows系统上搭建C语言开发环境时,很多初学者混淆编辑器、编译器与调试器的分工,导致配置过程屡屡受挫。理解VSCode作为轻量级编辑器的定位,以及MinGW-w64提供的gcc编译器在源码编译中的核心作用,是顺利完成环境配置的关键。环境变量的正确设置直接影响gcc命令能否全局调用,而C/C++插件则赋予编辑器语法高亮与智能提示能力。通过安装VSCode、配置MinGW-w64、安装插件、汉化界面并运行一个最简单的hello.c程序,就能系统掌握这套开源工具链的完整工作流。无论是用于课程学习、算法练习

weixin_42531923的博客 533

最长公共子序列(信息学奥赛一本通1297 ssl 1463)#线性动态规划#

【题目描述】 我们称序列Z=<z1,z2,...,zk>Z=<z1,z2,...,zk>是序列X=<x1,x2,...,xm>X=<x1,x2,...,xm>的子序列当且仅当存在严格上升的序列<i1,i2,...,ik><i1,i2,...,ik>,使得对j=1,2,...,k,有xij=zjxij=zj。比如Z=<a...

lemondinosaur的博客 501

2015年全国大学生电子设计大赛综合测评题

2015年全国大学生电子设计大赛综合测评题 题目如下: 一、555产生可调方波 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。 555定时器可组成单稳态电路、多稳态电路和无稳态电路。产生方波其实就是制造一个无稳态电路。 555定时器的引脚功能: 其中: DIS引脚与OUT脚电平一致 TRIG: 当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时输出端给出高电平。 THR:当此引脚电压升至2/3VCC(或由控制端决定的阈值电压

m0_47066484的博客 3万+

【SSL】1463最长公共子序列

【SSL】1463最长公共子序列 Description 设有A、B两个字符串,找出A、B共同子串,每个字符串无相同字符,可以不连续,但顺序不能颠倒。 Input 第一行字符串A 第二行字符串B Output 最长公共子串的长度. Sample Input abcfbc abfcab Sample Output 4 思路 设f[i][j]表示a串前i个字符与b串前j个字符的最长公共子串的长度, 状态转移方程: 当a[i]==b[j]时:f[i][j]=f[i-1][j-1]+1 否则:f[i][j]=max

weixin_46975572的博客 193

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8607

泛微 OA - 根据流程 requestid 获取流程中的附件

在泛微 OA 流程中,附件是通过加密上传的,如果在第三方系统想要调用 OA 系统获取 OA 附件,暂时没有很好的方法实现。但是可以在本地进行调用,得到附件信息,拿到这些信息后,可以用过 url 地址在本地下载。

小松鼠的博客 5831

ssl1463-公共子串【各种dp之1】

前言:开始水做练习题了,反正难度还是比较大的QAQ。比较dp。emmmmmmmmmmmmmmmmmmm题目大概就是给出两个字符串,蓝后让你求出他们相同的一串(but可以不连续 不连续还叫子串?)的长度。输入abcfbc abfcab输出4解题思路(不存在的思路)看了看题目,不禁陷入沉思这道题有点水了。我们用f[i][j]来表示第一串前i个和第二串前j个的最大值。代码#include<cstdio

QuantAsk 517

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1510

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 262

科研ABC - The Results Section(SCI论文写作补充)

1 前言 1.1 IMRD格式 1.2 Results部分意义 1.3 Results部分主要内容 2 Results & Discussion关系 2.1 Results & Discussion部分的搭配方式 2.2 Results & Discussion部分的区分 3 Results部分的结构 3.1 Move 1: Set the Stage 3.1....

洋洋洋2020的blog 1622

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5383

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 324

【云原生】阿里云SLS日志自定义字段标签实现日志告警

样例:一个典型的java log初始化日志格式把日志中的INFO提取出来做为一个标签,在开源日志框架中,配置采集器实现- regex:在阿里云SLS日志服务同样可以实现,首先我们进入到一个日志库,查看数据接入,我这里使用的是Logtail工具在【处理配置】中,选择【处理插件组合】,新增提取字段插件原始字段:填写要被提取的日志,对应原始字段的内容做正则结果字段:正则表达式对应的捕获组对应结果:捕获组 匹配内容 说明1 ywgy-app-service 服务名称。

CN_Eden 742

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 305

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 598

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 143

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 23

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 358

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 172

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 416

【MPC 算法】Python 实战:模型预测控制(MPC)算法原理与代码实现

本文介绍模型预测控制(MPC)原理与Python实现。MPC通过滚动优化预测未来状态,结合系统模型、目标函数与约束条件,动态生成最优控制序列。以一阶温度系统为例,使用CVXPY构建凸优化问题,实现加热功率的智能调控。代码包含模型预测、目标函数设计(含温度跟踪与控制平滑惩罚)、输入约束及滚动更新机制。仿真结果表明,MPC能快速稳定温度至目标值60℃,且控制动作平滑合理,体现其在复杂系统中的优越性。

赖德发的博客 32

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 221

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 180

【前缀和+复合离散化】题解:双色矩形(two)_数据结构_算法优化_预处理_二维前缀和_STL_C++算法竞赛

给定一个 $n \times n$ 的黑白棋盘,初始按 $i+j$ 奇偶染色,经 $k$ 个格子颜色翻转后,求子矩形中黑白格子数差的绝对值最大值。由于 $n$ 可达 $10^9$,但 $k \leq 50$,可离散化关键点。枚举所有由修改点构成的矩形及其四边向外扩展(共 $16$ 种扩展方式),利用二维前缀和快速计算变化量,结合奇偶性判断多出的格子颜色,最终取最大绝对差。时间复杂度为 $O(k^4)$,在 $k \leq 50$ 下可行。

YLCHUP的博客 183

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 369

算法62&&63,存在重复元素

判断整数数组中是否有任意元素出现至少两次。:判断数组中是否存在两个。,且索引差值的绝对值。

sheshibenniaodan的博客 38
上一篇: P1216 ]数字三角形 (踢飞动规,最短路模板题)
下一篇: 大模拟 鸭棋(250行超短做法,简单易懂)
.SAI.
博客等级 码龄5年 835粉丝 63原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值