学习笔记(关于各种序列和对应算法)后面会进行补充和优化
一般思路:
1.求每一个特殊点(例如起点终点高峰低谷)的子序列
2.分解,递归地求值
一.连续子段类 双指针,线段树
1.最大连续子段和 线段树->利用最大前缀后缀以及总和维护最大连续子段和
2.最大连续不重复子序列->发现指针只能向右走的单调性,对于每一个点向左侧找到最长序列
二.子序列类 dp
1.最长上升(下降)子序列 dp->对于每一个点k,向左(右)找子序列
以把终点作为分类方法为例,我们发现,对于每一个i,f[i]都可以由[1~i-1]中每一个大于或小于a[i]的f[1~i-1]推导出来,存在递推关系,可以用线性dp来做
这类问题的问法,所求数据一般是长度,总和,极值之类,而它们都可以由已知的数据结合目前考虑的数据进行运算得到
2.最长单峰子序列->对于每一个点k,分别向两边找最大上升子序列和最大下降子序列,把它们的长合并减去多计算的一个k 其属于最长上升(下降)子序列的变式