【线性DP】

目录

一、LIS 优化

优化技巧 :low[len] 存长度为 len 的上升子序列最小末尾,严格单调递增。x > low[top] 追加,否则二分替换。严格上升用 lower_bound,不下降用 upper_bound。

时间复杂度: O ( n 2 ) O(n^2) O(n2) -----> O ( n l o g n ) O(n log_n) O(nlogn)。

评价:注意查找的边界,加强版卡了我好久。

二、LCS 优化(全排列)

优化技巧 :两序列均为 1 ~ n 全排列时,pos[a[i]]=i,将 b 映射为 c[j]=pos[b[j]],求 c 的 LIS。

时间复杂度: O ( n 2 ) O(n^2) O(n2) -----> O ( n l o g n ) O(n log_n) O(nlogn)。

评价:比较特殊,一般是模版。

三、LCIS 优化

优化技巧 :固定外层 i 扫描 j 时维护 val(满足 b[k]<a[i] 的 dp[i-1][k] 最大值),A[i]==B[j] 时直接赋值,吃掉最内层 k 循环。

时间复杂度: O ( n m 2 ) O(n m^2) O(nm2) -----> O ( n m ) O(n m) O(nm)。

评价:我无话可说。

四、逆向线性DP优化

优化技巧 :正向需记录"剩余忙碌时间"导致维度爆炸,逆向定义 dp[t] 为从 t t t 到终点的最优值,倒序扫描。

评价:zl 又以一种奇奇怪怪的方式进了机房。

T1~T3解决方式如上,不做讲解。

五、上升点列

问题 : n n n 个整点,最多添加 k k k 个,求最长上升点列总数量。

思路 :按 x x x 升序、 x x x 同按 y y y 升序排序。dp[i][p] 以第 i 点为末尾、消耗 p 个添加点。

评价:几乎是一道板子LIS。

六、守望者的逃离

问题 :距出口 S S S 米, T T T 秒内逃脱,每秒可选瞬移、回复魔法或跑步。

思路 :跑两次。第一轮闪烁/回蓝,第二轮跑步修正 dp[t]=max(dp[t],dp[t-1]+17),每秒检查到达。

评价:影分身,不是很难。

七、尼克的任务

问题:n 分钟内 k 个任务,某时刻有任务必须选一个,无任务可休息,求最多休息时间。

思路 :逆向 dp[t] 为从 t 到 n 的最长休息时间。倒序:无任务 dp[t]=dp[t+1]+1;有任务 dp[t]=max(dp[t+len])。

评价:逆向DP板子。

八、饥饿的奶牛

问题 : n n n 个区间,选不相交区间使总长度最大,坐标范围 3 × 10 6 3 × 10^6 3×106。

思路 :dp[i] 为 0 , i 0,i 0,i 内最大总长度。初始化 dp[i]=dp[i-1]( i i i 不作为右端点);对每个以 i i i 为右端点的区间 x , i x,i x,i,若 x > 0 x>0 x>0 则 dp[i]=max(dp[i],dp[x-1]+i-x+1),若 x = 0 x=0 x=0 则 dp[i]=max(dp[i],i-x+1)(不可继承遗产,直接取本段)。

评价:注意边界,否则你会RE/WA到怀疑晗源。

九、最长前缀

问题 :短字符串集合 P(长度 ≤ 10 ≤ 10 ≤10)和母串 S(长度 ≤ 2 × 10 5 ≤2 × 10^5 ≤2×105),求能拼出的最长前缀长度。

思路 :vis[i] 布尔,表示 S S S 前 i i i 字符能否由 P P P 中元素拼出。初始化 vis[0]=1。对每个位置 i i i,枚举 P P P 中每个单词,若长度不超过 i i i 且 vis[i-len]=true 且 S.substr(i-len,len) 等于该单词,则 vis[i]=true 并 break。用 ans 记录最大的可达 i i i。

评价:布尔可达性DP,单词长度上限小是突破口。

相关推荐
w_zero_one3 分钟前
算法--桶思想
java·开发语言·算法
kyrie_sakura21 分钟前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
wordbaby1 小时前
同一次请求里的两道锁:图解搞懂国密 SM2 与 SM3
算法
宝绿特塑业再生科技1 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~2 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
miller-tsunami2 小时前
内存管理&模板
c++·算法·内存管理·模板
青少儿编程课堂2 小时前
蓝桥杯青少组·全国青少年信息素养·电子学会Scratch考级:校园智能抢答器项目解析
c++·python·算法·bfs·信息学竞赛
SZYSK2 小时前
一套人员主数据,三套事务:通行、消费、人证比对如何分事件类型
物联网·算法·harmonyos
怕浪猫2 小时前
不用摄像机,我把历史故事做成竖屏视频
算法·面试·github
郝学胜-神的一滴3 小时前
AI 编程智能体 16:从零基础搭建到精细化优化
人工智能·python·算法·语言模型·langchain·pip