当前位置: 首页 > article >正文

《算法竞赛从入门到国奖》算法基础:动态规划-最长子序列

Yupureki:个人主页✨个人专栏:《C》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》《个人在线OJ平台》Yupureki的简介:目录1. 最长上升子序列算法原理代码示例2. 合唱队形算法原理代码示例3. 最长公共子序列算法原理代码示例4. 编辑距离算法原理代码示例1. 最长上升子序列题目链接:B3637 最长上升子序列 - 洛谷算法原理状态方程:dp[i]表示以下标为i元素为结尾的最长子序列。最终结果是整张表中的最大值状态转移:既然是i元素为结尾因此我们需要与前面的子序列做连接。自己跟自己玩长度为1跟前面的所有子序列做连接前提是第i个元素的大小必须大于子序列的末尾元素。初始化:不用单独初始化每次填表的时候先把这个位置的数改成1即可。填表顺序:从左到右代码示例#include iostream #include vector using namespace std; int main() { int n; cin n; vectorint v(n); vectorint dp(n); for (int i 0; i n; i) { int num; cin num; v[i] num; } int ret 0; for(int i 0;in;i) { dp[i] 1; for(int j i - 1;j0;j--) { if(v[i] v[j]) { dp[i] max(dp[i],dp[j] 1); ret max(ret,dp[i]); } } } cout ret; return 0; }2. 合唱队形题目链接:P1091 [NOIP 2004 提高组] 合唱队形 - 洛谷算法原理状态表示:两张dp[i]表。dp1[i]表示以第i个元素为结尾从左到右的最长子序列的长度dp2[i]表示以第i个元素为结尾从右到左的最长子序列的长度最终整个以中间元素为分割线从左到右从右到左都呈递增的序列长度即为len max(dp1[i] dp2[i])要分出去的学生个数即为n - len状态转移:分别从左向右从右向左打两张表即可初始化:不需要做额外的初始化填表顺序:分别从左向右从右向左代码示例#include iostream #include vector using namespace std; int main() { int n;cinn; vectorint v; vectorint dp1(n,1); vectorint dp2(n,1); for(int i 0;in;i) { int num;cinnum; v.push_back(num); } for(int i 0;in;i) { for(int j 0;ji;j) { if(v[j] v[i]) dp1[i] max(dp1[i],dp1[j]1); } } for(int i n-1;i0;i--) { for(int j n-1;ji;j--) { if(v[j] v[i]) dp2[i] max(dp2[i],dp2[j]1); } } int ret 0; for(int i 0;in;i) { ret max(ret,dp1[i] dp2[i] - 1); } coutn-ret; return 0; }3. 最长公共子序列题目链接:牛可乐和最长公共子序列算法原理状态表示:dp[i][j]表示第一个子序列前i个元素中第二个子序列前j个元素中最长的公共子序列长度状态转移:如果s1[i] s2[j]说明可以以这个字母做结尾形成公共子序列。那么只需要找到第一个序列前i - 1,第二个序列前j - 1中找到最长的公共子序列拼接上去即可。即dp[i][j] dp[i - 1][j - 1] 1;如果s1[i] ! s2[i]说明最长公共子序列不可能同时以s1[i]和s2[j]做结尾那么有两种策略在s1的前i - 1,s2的前j个中找在s1的前i ,s2的的前j - 1个中找最终结果取二者最大值dp[i][j] max(dp[i - 1][j], dp[i][j - 1]);初始化:不需要做额外的初始化填表顺序:从左到右代码示例#include iostream #include vector using namespace std; int main() { string a, b; while (cin a b) { vectorvectorint dp(a.size() 1, vectorint(b.size() 1)); for (int i 1; i a.size(); i) { for (int j 1; j b.size(); j) { if (a[i - 1] b[j - 1]) dp[i][j] dp[i - 1][j - 1] 1; else dp[i][j] max(dp[i - 1][j], dp[i][j - 1]); } } cout dp[a.size()][b.size()] endl; } }4. 编辑距离题目链接:P2758 编辑距离 - 洛谷算法原理状态表示:dp[i][j]表示考虑a的前i个元素b的前j个元素将a转换成b的最少操作次数状态转移:当a[i] b[j]时直接考虑dp[i-1][j-1]即可当a[i] ! b[j]时删除a[i]:相当于dp[i-1][j]插入一个字符(b[j]):相当于dp[i][j - 1]将a[i]改为b[j]:相当于dp[i-1][j-1]取这三者的最小值加1即可初始化:不需要做额外的初始化填表顺序:从左到右代码示例#include iostream #include string #include vector using namespace std; int main() { string a,b;cinab; int n a.size(); int m b.size(); vectorvectorint dp(n1,vectorint(m1)); for (int i 0; i n; i) { dp[i][0] i; } for (int j 0; j m; j) { dp[0][j] j; } for(int i 1;in;i) { for(int j 1;jm;j) { if(a[i-1] b[j-1]) dp[i][j] dp[i-1][j-1]; else dp[i][j] min(dp[i][j-1],min(dp[i-1][j],dp[i-1][j-1])) 1; } } coutdp[n][m]; return 0; }

相关文章:

《算法竞赛从入门到国奖》算法基础:动态规划-最长子序列

💡Yupureki:个人主页 ✨个人专栏:《C》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》 《个人在线OJ平台》 🌸Yupureki🌸的简介: 目录 1. 最长上升子序列 算法原理 代码示例 2. 合唱队形 算法原理 代码示例 3. 最长公共…...

实战演练:基于快马平台与AI模型打造一个智能电商导购Agent

最近在尝试将AI技术落地到实际业务场景中,发现电商导购是个非常实用的切入点。今天就来分享下如何用InsCode(快马)平台快速搭建一个智能电商导购Agent的全过程。 项目架构设计 这个导购Agent采用前后端分离架构,主要分为三个模块: 前端交互…...

OpenClaw技能市场:10个适配Qwen2.5-VL-7B的实用自动化模块

OpenClaw技能市场:10个适配Qwen2.5-VL-7B的实用自动化模块 1. 为什么需要为Qwen2.5-VL-7B定制技能? 当我第一次在本地部署Qwen2.5-VL-7B这个多模态模型时,最让我惊喜的是它对图像和文本的联合理解能力。但很快我发现一个问题:模…...

阿博图书馆管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

💡实话实说:用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否,咱们都是朋友,能帮的地方我绝不含糊。买卖不成仁义在,这就是我的做人原则。摘要 在信息化时代背景下,图书馆作为知识传…...

杭州污水提升泵靠谱厂家

在杭州及周边地区进行地下室改造、商业空间建设或解决特殊排污需求时,选择一家技术可靠、服务专业的污水提升泵厂家至关重要。在众多厂家中,杭州富阳赛特仪表阀门有限公司(赛斯瑞特) 凭借其深厚的技术积淀、过硬的产品品质和完善的…...

绝地求生游戏辅助工具:罗技鼠标宏自动化配置指南

绝地求生游戏辅助工具:罗技鼠标宏自动化配置指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》这款高强度的战术竞技…...

精选 Skills 推荐:10 个让 Coding Agent 如虎添翼的Skills + 优质来源分享

精选 Skills 推荐:10 个让 Coding Agent 如虎添翼的Skills 优质来源分享 本篇是 Vibecoding 系列教程 的工具导向专题篇。 前篇:进阶教程(一):MCP Skills 让 coding agent 有自己的工具系列合集:Vibecodi…...

OpenClaw+Qwen3-14b_int4_awq:自动化内容处理与发布流水线

OpenClawQwen3-14b_int4_awq:自动化内容处理与发布流水线 1. 为什么需要自动化内容流水线 作为一个长期与文字打交道的创作者,我每天要处理大量重复性工作:从各个渠道收集素材、整理成结构化内容、撰写初稿、调整格式、最后发布到不同平台。…...

嵌入式开发中的寄存器操作与函数指针应用

1. 嵌入式开发中的寄存器操作技巧在嵌入式系统开发中,直接操作硬件寄存器是最基础也是最核心的技能之一。寄存器是CPU与外围设备交互的窗口,通过读写特定内存地址的寄存器,我们可以控制硬件的行为。下面我将详细介绍几种常见的寄存器操作方法…...

OpenClaw自动化边界:千问3.5-27B不适合处理的五类任务

OpenClaw自动化边界:千问3.5-27B不适合处理的五类任务 1. 为什么需要明确自动化边界? 去年冬天,我花了整整三天时间调试一个OpenClaw自动化流程——让AI帮我整理电脑里积压的200GB设计素材。当看到脚本误删了未备份的客户源文件时&#xff…...

环境科研必备:从入门到精通:大气颗粒物PMF源解析技术全案解析(含软件实操)

在大气环境科研领域,源解析是精准治污的“眼睛”。而在众多源解析方法中,PMF(正定矩阵因子分解)模型因其无需先验信息、结果物理意义明确等优势,成为了科研人员手中的“金标准”。然而,很多同学在实操中常常…...

【网络层-IP数据报】

网络层-IP数据报一、概念二、内容三、分片一、概念 1.IP 属于网络层协议,提供不可靠、无连接的数据包交付服务,核心单元就是 IP 数据报。 2.无连接:每个数据报独立路由,走不同路径也可以。 3.不可靠:不保证一定送达、…...

化整为零、分而治之、异步编排:一文读懂现代并发的底层心法

LongAdder:化整为零,热点分散 在Java多线程编程中,‌原子变量(如AtomicLong)‌通过CAS操作实现线程安全的累加。然而,在高并发场景下,大量线程争抢同一原子变量会引发严重的‌缓存一致性问题‌。…...

曾经我和大模型交流业务实现记录

第一次: 我有一组子组件11个,通过子组件的不同组合,可以组成表单,这些表单让不同的用户使用,表单组成公共的内容,让大部分用户使用,当然用户可以在这些表单的基础上修改一些默认值,变…...

Pixel Aurora Engine应用场景:独立开发者低成本构建像素IP资产库

Pixel Aurora Engine应用场景:独立开发者低成本构建像素IP资产库 1. 像素艺术创作新纪元 在游戏开发领域,像素艺术始终保持着独特的魅力。从早期的《超级马里奥》到现代的《星露谷物语》,像素风格游戏凭借其怀旧感和艺术表现力,…...

数据库表的性能优化过程

问题背景做一个数据库表查看、标注与分析的工具软件。是数据库中表的信息(information_schema.tables);是的数据字典文档,存储在本地文件中;是对的额外标注信息,存储在另一个数据库中。每一条,最…...

新手福音:通过快马平台零代码基础理解qun329群聊应用开发

作为一个刚接触编程的新手,想要理解群聊应用开发确实容易一头雾水。最近我在尝试用InsCode(快马)平台搭建类似qun329的简单群聊网页时,发现整个过程比想象中简单很多。下面分享我的学习过程,希望能帮到同样零基础的朋友。 项目结构规划 首先明…...

从Java全栈工程师视角看Web开发的实战与思考

从Java全栈工程师视角看Web开发的实战与思考 面试现场:一次真实的技术对话 面试官:你好,我是今天的面试官,很高兴见到你。请先简单介绍一下自己。 应聘者:你好,我叫李明,28岁,本科学…...

OpenClaw+Qwen2.5-VL-7B省钱方案:自建多模态接口替代GPT-4V

OpenClawQwen2.5-VL-7B省钱方案:自建多模态接口替代GPT-4V 1. 为什么选择本地多模态方案 去年我在开发一个智能内容管理工具时,频繁调用GPT-4V处理截图和文档解析,每月账单轻松突破2000元。最痛心的是,80%的简单图片识别任务其实…...

OpenClaw多模态技能库:Qwen3.5-9B-AWQ-4bit实现10种图片处理场景

OpenClaw多模态技能库:Qwen3.5-9B-AWQ-4bit实现10种图片处理场景 1. 为什么需要多模态技能库? 去年我接手了一个个人项目,需要批量处理几百张产品照片。手动用PS抠图、调色、加文字,花了两周才完成。当时就想:如果能…...

企业级离线OCR深度解析:5大策略实现高性能文字识别

企业级离线OCR深度解析:5大策略实现高性能文字识别 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...

OpenClaw小团队协作:千问3.5-35B-A3B-FP8共享技能库搭建

OpenClaw小团队协作:千问3.5-35B-A3B-FP8共享技能库搭建 1. 为什么我们需要共享技能库 去年冬天,我们团队在尝试用OpenClaw自动化周报生成时遇到了一个典型问题——每个人都在重复造轮子。小王写了个飞书日程抓取脚本,小李开发了Git提交记录…...

济南精神心理专科:如何识别躯体化障碍的早期信号

济南躯体化障碍疾病就医选择难题在济南,面对躯体化障碍疾病的朋友最关心的是隐私和靠谱。选择一家好的医院至关重要,尤其是看躯体化障碍一定要选专科专业医院。这类医院不仅在专业诊疗上更有优势,还能提供更好的隐私保护和服务体验。本文将基…...

多模态场景:头巾误判为厨师帽 — 问题分析与调优指南

多模态场景:头巾误判为厨师帽 — 问题分析与调优指南适用对象:使用 Qwen-VL 等多模态大模型做「厨师帽 / 头饰」相关识别时的面试问答、方案设计与落地调优参考。1. 问题本质:为什么会把头巾当成厨师帽 这通常不是「模型坏了」,而…...

高效大麦抢票自动化工具实战指南:开源项目的专业配置教程

高效大麦抢票自动化工具实战指南:开源项目的专业配置教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 大麦网作为国内领先的演出票务…...

win11操作系统

‌电脑显卡 是否是DirectX12 使用 DirectX 诊断工具(dxdiag)‌ 按下 Win R,输入 dxdiag, win 11 安装电脑配置要求: 核心硬件配置 处理器‌:1 GHz 或更快的兼容 64 位处理器(双核心或多核心…...

OpenClaw学术助手:Qwen2.5-VL-7B自动解析论文图表数据

OpenClaw学术助手:Qwen2.5-VL-7B自动解析论文图表数据 1. 为什么需要自动化论文图表解析 作为一名经常需要阅读大量学术论文的研究者,我发现自己花费了太多时间在手动转录图表数据上。每当遇到一篇包含复杂实验数据的论文,就需要对着PDF截图…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路,具有过温保护和过流保护,带隙,BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记,适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...

OpenClaw定时任务管理:千问3.5-27B驱动日报自动生成

OpenClaw定时任务管理:千问3.5-27B驱动日报自动生成 1. 为什么需要自动化日报 每周五下午,我都会陷入一种"汇报焦虑"——要手动整理GitHub提交记录、汇总JIRA任务进度、编写本周技术总结。这个过程通常要花费1-2小时,而且内容模板…...

OpenClaw数据清洗:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理混乱CSV文件

OpenClaw数据清洗:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理混乱CSV文件 1. 为什么需要自动化数据清洗 上周我接手了一个市场调研项目,客户发来的CSV文件打开就让我头皮发麻——编码混乱、字段名全是大写拼音缩写、日期格式五花八门。手动…...