【线性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,单词长度上限小是突破口。

相关推荐
奋发向前wcx1 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
li星野1 小时前
DO — Auxiliary Verb (One-Page Notes)
学习
minglie11 小时前
关系的有向管道模型
学习
罗湖老棍子3 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
~kiss~3 小时前
LangChain 基础学习
学习·langchain
一木 之林3 小时前
提示词工程学习总结:用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线
人工智能·学习·计算机视觉·金融·分类
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
我命由我123454 小时前
Photoshop - Photoshop 使用对齐功能定位元素
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法
飘尘5 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试