各种蹂躏——基础dp

本文回顾了动态规划中的两种经典问题:最长递增子序列(LIS)和最长公共子序列(LCS)。对于LIS,通过维护单调队列实现了nlogn的解决方案;而对于LCS,详细阐述了二维矩阵和滚动数组的优化方法,降低空间复杂度。同时提及最大子段和问题及其空间优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1) LIS:  很久之前就学过nlogn的LIS,不过早就忘了,今天一考,甚至没想到这就是LIS,然后各种蹂躏;

维护一个队列:v[]; v[i]表示长度为i的采摘顺序的最后一个采摘的西瓜的最小值,这样可以保证v数组是单调递减的。这样在每次查询中都可以根据单调性二分。就将复杂度将为nlogn。

(2) LCS: 又是很久之前学过的,不过当时就没怎么搞清楚,现在明白了,就是用一个矩阵求两个字符串的匹配情况,然后求最长的对角线。空间复杂度O(n*n) 时间复杂度O(n*n),主要是优化空间,滚动数组。

f[i][j]=f[i-1][j-1]+1; a[i]==b[j]

f[i][j]=max(f[i][j-1],f[i-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值