数字三角形问题
题型大概也就分两种
一是走地图 , 第二种就是传纸条问题两个一起走
分析方式很简单就是列举一下状态就行
别忘记初始化特别是边界的点从哪里转移过来的
f[0][0] = f[1][1 ] = f[1][0] = 0这种
传纸条记得要如果是同一个点i + j是相同的
同一个点a[i][j] 就加一次两个不同点都加上
最长上升
一:模板不要忘记f[i] = 1因为最少是1
二: 优化一可以用栈来写,优化二可以直接调用lower_bound或者手写二分优化三直接贪心
三:登山先上升后下降的问题直接双向LIC然后每个点f[i] + g[i] - 1就可以了 然后可以用状态机模型来做直接替换掉两个数组
四:最少用多少个上升子序列或者下降子序列可以全部覆盖直接 上升求下降 , 反过来就行;如果两个可以同时有直接暴搜
LCS
分析方法
f[i][j]都是a前i , b前j个元素 然后 就是看最后一个不同点
1:a[i] !=b[j]
i - 1 可以跟j 或者 i跟j-1
然后如果看同长度a[i]==b[j] 就+1
二:编辑距离这钟题别忘记初始化就行
LCIS
分析方法就是
f[i][j] i , j 然后以b[j] 为结尾的LCIS
还是找最后一个不同
1:不包括a[i] f[i][j] = f[i-1][j]
2: 包括a[i] 那么b[j] 一定是小于a[i]的那么就可以提前用一个变量来更新b[j]的最大距离
if(a[i] == b[j]) f[i][j] = max(f[i][j] , maxv);
if(a[i] > b[j] ) maxv = max(maxv , f[i-1][j] + 1);