线性(包括最长上升子序列)

母题

求最长上升子序列。

\(f_i\) 表示以 \(i\) 结尾的答案,然后考虑对于 \(a_i>a_j,f_i=\max(f_j+1)\)

母题2

51nod-基因匹配+luogu-【模板】最长公共子序列

本题重在转化。由于最长公共子序列的下标是一个最长上升子序列,所以我们可以考虑把数字映射成下标,有多个就要倒序把每个值映射成多个不同的值,因为一个数有多种下标都是可取的。

  1. 1

    类似,但是需要预处理,结构是一样的。

  2. 2

    前缀和、差分,还是很类似。

  3. 3

​ 多记录当前选取的子段个数,考虑最后一段选取即可。

  1. 4
    状态还是前xxx+“<” 个数。
    考虑新的数放的位置,由于当前数字是最大的,所以只可能增加一个 \(>,<\),考虑大于小于的个数,即可确定插入的位置有几个,根据乘法原理即可。

  2. https://www.acwing.com/activity/content/code/content/6991643/
    简单的拆解成上升段和下降段。

  3. https://www.cnblogs.com/wscqwq/p/17416716.html
    利用贪心思想,然后求解母题。

  4. https://www.cnblogs.com/wscqwq/p/17416717.html

​ 爆搜加贪心,还是动态规划的思想。

  1. https://www.cnblogs.com/wscqwq/p/17589856.html

​ 数字最终变换完后只有两种可能,我们状态就是分别记录两种的个数,然后根据已 有的和可以计算出当前的数应该的取值。

  1. https://www.cnblogs.com/wscqwq/p/17609388.html

​ 前xxx+乘号个数。

​ 考虑最后一个乘号即可。

​ 高精度可以实现成只有两位。

  1. https://www.cnblogs.com/wscqwq/p/17621465.html

​ 暴力破环,然后就是上题做法。

  1. https://www.cnblogs.com/wscqwq/p/17644083.html

​ 关键是根据最值来判断最多会用几次跳过。

​ 可以确定一个上界,那么就可以采用最后的点,跳过的点数的状态。

  1. https://www.acwing.com/activity/content/code/content/6994539/

​ 需要用到一个数学公式,然后就可以将中间过长的区间进行放缩,使得原来从哪里 能跳到一个位置,现在还是可以,即与原来等价。矩阵优化也许也可行。

  1. https://www.acwing.com/activity/content/code/content/6994965/

​ 前xxx+前xxx+已用个数。

​ 然后利用方程之间的关系,采用类似前缀和式优化。

  1. https://www.cnblogs.com/wscqwq/p/18290376

    由于是序列型,所以一位是前 \(i\) 个字符,发现 \(k\) 小,所以直接用第二维达到 \(2^k\) 表示最后 \(k\) 个的字符,然后是一些预处理。

特殊类型-按照一段连续选择转移(往往使用单调队列优化(大多数)、线段树等数据结构(少数))

如果题目中出现了限制不能超过连续多少段怎么样或者区间 \([l_i,r_i]\) 内都选会有什么贡献/代价,那么可以使用 \(f_i\) 表示前 \(i\) 个数的选择状态,然后可以从任意的 \(f[j]\) 过来,考虑 \([j+1,i]\) 的代价等,或者不选,从 \(f[i-1]\) 来。

例题

修剪草坪(连续工作)
51nod-3978列车(需要发现性质才可以这样做)
51nod-3385干草堆(连续放在一层)
CF115E-Linear-Kingdom-Races(线段树)

特殊类型-每次跳固定的步数范围

如单调队列模板、P3957 [NOIP2017 普及组] 跳房子51nod-3983走方格

特征-一般类型

问题都是一个序列上的,而且只需要考虑当前新加的数字即可。状态可能是前xxx或者是最后一个是xxx,附加其他属性。
如可以与计数类DP结合(计数类DP:题目中特别小的数可能都可以作为状态的一维。)
可能需要转化。

posted @ 2023-09-26 19:56  wscqwq  阅读(4)  评论(0编辑  收藏  举报