《序列 DP:C++ 中的“最长”套路与编辑距离》
📅 2026/7/11 1:57:12
👁️ 次浏览
序列 DP 就像是“找茬”或“连连看”。LIS在一堆乱序的数字里找最长的顺子。LCS比较两个 DNA 序列找出共同的基因片段。编辑距离Word 文档的“修订模式”计算改一个单词需要多少次键盘敲击。模块一最长递增子序列LIS1. 思路讲解定义dp[i]以nums[i]结尾的最长递增子序列的长度。对于每个i我们需要查看它之前的所有j(0 j i)。如果nums[j] nums[i]说明nums[i]可以接在nums[j]后面形成一个新的递增序列。状态转移dp[i] max(dp[i], dp[j] 1)。2. 代码详解cppclass Solution { public: int lengthOfLIS(vectorint nums) { int n nums.size(); if (n 0) return 0; vectorint dp(n, 1); // 初始化为1因为每个元素至少可以单独成一个序列 int ans 1; for (int i 0; i n; i) { for (int j 0; j i; j) { if (nums[j] nums[i]) { dp[i] max(dp[i], dp[j] 1); } } ans max(ans, dp[i]); // 更新全局最大值 } return ans; // 注意返回的是ans不是dp[n-1] } };易错点答案不是dp.back()因为最长的序列不一定以最后一个元素结尾。必须维护一个全局变量ans。模块二最长公共子序列LCS1. 思路讲解定义dp[i][j]字符串text1的前i个字符和text2的前j个字符的最长公共子序列长度。情况 1text1[i-1] text2[j-1]字符相同。这两个字符一定在 LCS 中所以dp[i][j] dp[i-1][j-1] 1。情况 2text1[i-1] ! text2[j-1]字符不同。这两个字符至少有一个不在 LCS 中。可能是删掉text1[i-1]也可能是删掉text2[j-1]。所以dp[i][j] max(dp[i-1][j], dp[i][j-1])。2. 代码详解cppclass Solution { public: int longestCommonSequence(string text1, string text2) { int m text1.size(), n text2.size(); vectorvectorint dp(m 1, vectorint(n 1, 0)); for (int i 1; i m; i) { for (int j 1; j n; j) { if (text1[i - 1] text2[j - 1]) { // 字符相同两边都推进一格 dp[i][j] dp[i - 1][j - 1] 1; } else { // 字符不同取删掉左边或删掉右边的较大值 dp[i][j] max(dp[i - 1][j], dp[i][j - 1]); } } } return dp[m][n]; } };C 字符串text1[i-1]是因为 DP 数组从 1 开始计数而 String 从 0 开始。模块三编辑距离Levenshtein Distance1. 思路讲解定义dp[i][j]将word1的前i个字符转换成word2的前j个字符所需的最少操作数。操作有三种插入、删除、替换。插入在word1插入一个字符等价于word2减少一个字符dp[i][j-1] 1。删除在word1删除一个字符dp[i-1][j] 1。替换如果两个字符不同替换最后一个字符dp[i-1][j-1] 1。特殊情况如果word1[i-1] word2[j-1]无需操作直接继承dp[i-1][j-1]。2. 代码详解cppclass Solution { public: int minDistance(string word1, string word2) { int m word1.size(), n word2.size(); vectorvectorint dp(m 1, vectorint(n 1, 0)); // 初始化word1变成空串只能靠删除空串变成word2只能靠插入 for (int i 1; i m; i) dp[i][0] i; for (int j 1; j n; j) dp[0][j] j; for (int i 1; i m; i) { for (int j 1; j n; j) { if (word1[i - 1] word2[j - 1]) { // 字符相同无需操作 dp[i][j] dp[i - 1][j - 1]; } else { // 字符不同取三种操作的最小值 1本次操作成本 dp[i][j] min({ dp[i - 1][j] 1, // 删除 dp[i][j - 1] 1, // 插入 dp[i - 1][j - 1] 1 // 替换 }); } } } return dp[m][n]; } };C 技巧min({a, b, c})是 C11 以后支持的初始化列表用法可以一次性比较多个值。总结C DP 避坑指南数组大小为了逻辑清晰通常开dp[n1]或dp[m1][n1]牺牲一点空间换取代码可读性。初始化求最大值时初始化为0或INT_MIN。求最小值时初始化为INT_MAX。布尔型初始化dp[0] true。遍历顺序0-1 背包容量倒序。完全背包容量正序。序列 DP通常是双重循环注意内外层逻辑。引用传参在函数中传递大型vector时务必使用const vectorint或vectorint否则会复制整个数组导致超时TLE。谢谢
免费解锁Windows多用户远程桌面:RDP Wrapper完全指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rdp/rdpwrap
你是否曾经因为Windows远程桌面的单用户限制而感到困扰?当家人需要远程学习、同事需要…
📅 2026/7/11 1:57:12
搭建实验拓补实验配置R1R2R3R4R5R6R7R8R9R10R11R12结果
📅 2026/7/11 1:57:12
MQTT QoS 0/1/2 消息可靠性实测:Python Paho 客户端 3种场景性能对比物联网应用中,消息传输的可靠性直接影响系统稳定性。MQTT协议通过QoS(服务质量)机制提供三种不同级别的消息保障,但每种级别对性能的影响差异显著。…
📅 2026/7/11 1:56:12
Hearthstone-Script炉石传说脚本:3步实现智能自动化,轻松刷取游戏资源 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script
还在为炉…
📅 2026/7/11 12:17:53
大模型训练范式深度解析:从预训练到对齐优化
一、大模型训练的技术全景
大语言模型的训练是一个多层次、多阶段的系统工程。理解这一过程,不仅有助于深入认识模型的能力来源,也为模型选型、微调优化和应用开发提供了理论基础。
当前业界主流的…
📅 2026/7/11 12:17:52
1. 项目概述:为什么我们需要手动编译 g2o?在 C 的机器人、计算机视觉和 SLAM(即时定位与地图构建)开发领域,g2o 是一个绕不开的名字。它是一个通用的图优化(Graph Optimization)框架,…
📅 2026/7/11 12:17:52
更多请点击:
https://codechina.net
第一章:Gemini Gmail 集成的核心价值与适用场景 Gemini 与 Gmail 的深度集成并非简单的功能叠加,而是通过 Google AI 原生架构实现的语义级协同——它让邮件不再仅是信息容器,而成为可理解、可…
📅 2026/7/11 12:17:52
import jenkins.model.Jenkins// 获取 Jenkins 实例
def jenkins Jenkins.instance// 收集数据:标签 -> 构建机列表
def labelToNodes [:]jenkins.nodes.each { node ->def nodeName node.namenode.assignedLabels.each { label ->def labelName label…
📅 2026/7/11 12:17:52
更多请点击:
https://kaifayun.com
第一章:IDE演进史与开发者工作流范式变迁 现代集成开发环境(IDE)已远非早期代码编辑器的简单延伸,而是演变为融合智能感知、云协同、实时反馈与领域特定抽象的“开发者操作系统”。…
📅 2026/7/11 12:16:52
摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计…
📅 2026/7/11 0:00:31
1. 命令简介gpm 是 Linux 系统下运行于虚拟控制台(文字终端模式)的鼠标服务器。它的主要功能是在没有图形界面的纯文本环境中,为虚拟控制台提供鼠标支持,允许用户使用鼠标进行文本的选择、复制和粘贴操作,极大地提升了…
📅 2026/7/11 0:00:31
导语
先澄清一个常被混用的概念:BI试点"上线",并不等于试点"验收通过"。很多企业把仪表板做出来、账号发下去、培训开完场,就默认试点已经跑通,随后进入推广阶段——结果推广到第二个部门、第三个业务线时&am…
📅 2026/7/11 0:00:31
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/10 22:46:54
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/10 22:46:54
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/10 22:46:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/10 22:46:54
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54