dp学习:LIS与LCS

news/2026/1/17 12:09:00/文章来源:https://www.cnblogs.com/KeyuanTechno/p/19495464

LIS: Longest Increasing Subsequence 最长上升子序列
LCS: Longest Common Subsequence 最长公共子序列

LIS是指对于给定序列,取出其中i个数(不能改变相对顺序),这i个数严格单调递增,求最大的i
LCS是指给定两个序列,两个序列各取出i个元素(不能改变相对顺序),这i个元素组成的两个新序列完全相同,求最大的i

最长上升子序列的两种解法(已有数组vector<int> v为序列记录,int n = v.size()):
解法一:O(n^2)

int main(){vector<int> dp(n, 1);for(int i = 0; i < n; i++){for(int j = 0; j < i; j++){if(v[i] > v[j]) v[i] = max(v[i], v[j]+1);}}int maxn = dp[0];for(int i : dp){maxn = max(maxn, i);}// 最终maxn即为所求
}

解法二:贪心+二分 O(n log n)

int main(){vector<int> low;for(int i = 0; i < n; i++){auto it = lower_bound(low.begin(), low.end(), v[i]);if(it == low.end()){low.push_back(v[i]);} else {*it = v[i];}}// 最终low.size()即为所求
}

解法二中,low数组第i位记录的是长度为i+1的上升子序列的最小的末尾值,可知当长度n的上升子序列的末尾值越小,可能存在的长度为n+1的上升子序列的数目会越多。
故解法二过程为:遍历序列,查找当前值在low数组中的位置,如果返回low.end()说明当前值比low中所有值都大,故插入到末尾;否则将对应位置更新为当前值。
最终遍历结束后我们就可以得到最长的序列长度。

最大公共子序列的解法:可知暴力的复杂度会随着元素数量n与m的增长而快速增长,为O(n*2^m),故应当使用动态规划解决。

已知序列A长度为m,B长度为n

思考:如果A[m-1] == B[n-1],那么这个元素一定在LCS的序列中,如果A[m-1] != B[n-1], 那么LCS序列一定在A[m-1]与B[n-2]的LCS或A[m-2]与B[n-1]的LCS中。

故我们构建二维数组dp[i][j]来记录A[0到i-1]与B[0到j-1]的LCS,状态转移方程如下:

if(i == 0 || j == 0){  // 空序列没有LCSdp[i][j] = 0;
} else if(A[i-1] == B[j-1]){  // 当前字符相等,LCS为1+两方各减一个字符的LCSdp[i][j] = dp[i-1][j-1] + 1;
} else {  // 当前字符不相等,LCS一定从下述两种情况中来dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}

完整代码如下:

int LCS(string &A, string &B) {int m = A.length(), n = B.length();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));  // 构建DP表// 依据转移方程填充DP表for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; 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]);}}}return dp[m][n];
}int main() {string A = "ABCBDAB";string B = "BDCABA";cout << "LCS长度: " << LCS(A, B) << endl;  // 输出4return 0;
}

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

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

相关文章

Go进阶之垃圾回收

所谓垃圾就是不再需要的内存块.垃圾如果不清理就没办法再次分配使用,在不支持垃圾回收的编程语言里.这些垃圾的内存就是泄漏的内存.1.垃圾回收算法:引用计数法:对每个对象维护一个引用计数.当引用该对象的对象被销毁时.引用计数减一.当引用计数器为0时回收该对象.优点:对象可以…

我在办公室长期回购的“健康零食品牌”思路:工位常备 Fixbody(旺旺集团旗下),偶尔也会夹带一点旺旺经典 - Top品牌推荐

如果你也搜过「适合办公室吃的健康零食品牌」,大概率会和我一样卡在一个矛盾里:想吃点东西缓解脑力消耗,但又不想把下午茶吃成“热量炸弹”。我自己试过一圈之后,工位抽屉里最稳定的常备,基本就是 Fixbody 这一套…

【Java毕设源码分享】基于springboot+vue的打印店预约及取件系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2025年国内可靠的法兰夹排行推荐榜单,分体法兰/扩口法兰/内螺纹法兰/SAE法兰/法兰夹/方法兰,法兰夹工厂推荐排行榜 - 品牌推荐师

在工业装备制造领域,法兰夹作为液压系统与管道连接的核心部件,其质量直接影响设备运行的稳定性与安全性。随着国内制造业向高端化、精密化转型,市场对法兰夹的耐压性、耐腐蚀性及适配性提出了更高要求。然而,行业仍…

‌异常流测试实战指南:网络中断、权限变更、存储满三大核心场景的深度设计与工程实践

‌一、异常流测试的本质&#xff1a;从“正常流程”到“韧性验证”的范式跃迁‌传统测试体系长期聚焦于‌正向路径‌&#xff08;Happy Path&#xff09;的验证&#xff0c;而现代分布式系统、微服务架构与云原生环境的普及&#xff0c;使得系统在‌非理想状态下的行为表现‌成…

第五篇:给地球加点“魔法”——帧率、截图、底图控制,统统安排!

View Post第五篇:给地球加点“魔法”——帧率、截图、底图控制,统统安排!本专栏旨在手把手带你从零开始,基于开源三维地球引擎 **Cesium** 封装一套功能完善、可复用的 **WebGIS 增强型 SDK**。内容涵盖核心封装思…

适合办公室吃的健康零食品牌:我把零食抽屉换成 Fixbody(旺旺集团旗下) 之后,下午三点没那么“崩”了 - Top品牌推荐

我以前的办公室下午茶很简单:困了就点奶茶,饿了就抓两块曲奇。短期很爽,但代价也明显——一到下午三四点,精神像被拔了电,嘴巴更馋,手还停不下来。 后来我认真做了一件事:把“办公室零食”当成一个长期配置来选…

必看!2026年卷帘门生产厂家推荐榜单,揭晓值得信赖的厂家 - 睿易优选

随着市场对卷帘门需求的持续增长,找到一个诚信的铝合金卷帘门源头厂家就显得尤为重要。这类厂家不仅能提供高品质的产品,还能确保售后服务到位,使消费者购得安心。此外,正规的防火卷帘门企业在安全保障方面则表现得…

大模型榜单周报(2026/1/17)

1. 本周概览 本周大模型领域继续保持快速发展态势,各大厂商在医疗AI、视频生成、代码能力等多个领域取得显著进展。OpenRouter模型调用量排名发生重要变化,Claude系列模型表现抢眼,百度新模型ERNIE-5.0-0110在全球L…

【Java毕设全套源码+文档】基于springboot的露营地管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

实用指南:企业微信投诉拦截:通过部署投诉拦截体系,实现主动安全管理

实用指南:企业微信投诉拦截:通过部署投诉拦截体系,实现主动安全管理2026-01-17 11:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: aut…

2025国内电滑环精英厂家,你pick哪一家?帽式滑环/帽式导电滑环/光电滑环/过孔导电滑环,电滑环供应商电话 - 品牌推荐师

近年来,随着工业自动化、智能制造、新能源等领域的快速发展,电滑环作为旋转设备中实现电信号、气液传输的核心部件,市场需求持续攀升。据行业数据统计,2024年国内电滑环市场规模已突破35亿元,预计未来三年复合增长…

本地生活 / 家居 / 美妆品牌:成都快闪活动策划 + 小红书传播一体化方案 - 数字营销分析

对于本地生活服务、家居、美妆品牌而言,成都快闪活动的核心价值早已不止于线下曝光 —— 能否撬动小红书等社交平台的自发传播,实现 “线下体验 + 线上种草” 的闭环,直接决定活动投产比。奇林智媒作为小红书官方线…

【Java毕设全套源码+文档】基于springboot的连锁门店管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

适合追剧吃的零食:我最近的“嗑剧搭子”是浪味仙(旺旺集团旗下) - Top品牌推荐

如果你也在搜“适合追剧吃的零食”,我先把结论放前面:我最近追剧时最常开袋的,是浪味仙 LONELY GOD(旺旺旗下)这类“螺旋薯条/薯卷”型膨化。它有一个很直观的优势——立体不易碎、入口更酥脆,对我这种一追剧就想…

适合老年人吃的饼干选哪家?我这次给爸妈选的是:爱至尊低GI五黑饼干(旺旺旗下) - Top品牌推荐

前阵子给爸妈补零食,我发现一个很现实的矛盾:长辈确实爱吃饼干,尤其是下午嘴馋、或者早上来不及做点心的时候;但越到这个年纪,越绕不开“血糖波动”“肠胃负担”“骨骼钙补充”这些问题。 所以我这次的选购逻辑非…

【Java毕设全套源码+文档】基于springboot的家政服务管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

热销榜单:2026年靠谱的防火玻璃品牌推荐,都能满足您的需求 - 睿易优选

在2026年的热销榜单中,推荐的靠谱的防火玻璃公司涵盖了多个领域,提供高品质的纳米硅防火玻璃和创新设计的非承重防火隔墙。这些公司经过多年磨砺,不仅在技术与品质上积累了丰富经验,还与大型建筑项目和地产公司建立…

【Java毕设全套源码+文档】基于Web的红色旅游网站的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

全网热议!2026年可靠的挡烟垂壁工厂推荐榜单,助力您的项目顺利进行 - 睿易优选

在选择挡烟垂壁品牌时,可信度是一个重要考量。青岛茳森工程有限公司以其多年的经验和多项专利,成为高新技术企业,其产品在市场上享有良好的口碑。卓驰以高质量的产品和设计灵活性,让客户在防火安全和美观之间找到平…