线性dp
文章平均质量分 55
xbb052
c++大学生
展开
-
acwing897.最长公共子序列(线性dp)
另一种a[i]=b[j]时,状态为f[i-1][j-1]+1,最后就取max(f[i][j],f[i-1][j-1]+1)(此时的f[i][j]已经在前两类取过最大值)if(a[i]==b[j]) f[i][j]=max(f[i][j],f[i-1][j-1]+1);给定两个长度分别为 N� 和 M� 的字符串 A� 和 B�,求既是 A� 的子序列又是 B� 的子序列的字符串长度最长是多少。分为三类状态,a[i]在子序列里面,b[j]不在子序列里面。状态表示为f[ i ] [ j-1 ]原创 2023-02-12 23:57:15 · 70 阅读 · 0 评论 -
acwing895.最长上升子序列(线性dp 及其优化(取更大数据时))
/假定len为目前最长子序列的长度,而且子序列一定呈单调递增的;所以对于一个数,用二分的方法判断他该放在目前子序列的哪个地方,并且对len进行更新。j++) //遍历(j,i) 区间。//如果放在子序列末尾则更新len;给定一个长度为 N� 的数列,求数值严格单调递增的子序列的长度最长是多少。−10^9≤数列中的数≤10^9;−10^9≤数列中的数≤10^9。输出一个整数,表示最大长度。原创 2023-02-12 23:36:43 · 60 阅读 · 0 评论 -
acwing898.数字三角形(线性dp 动态规划)
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。//注意加上自身的值。从下往上,每个点就两种走法,f[i][j]=max( f [ i +1] [ j ] , f [ i + 1 ] [ j + 1 ]);从三角形下端依次往上,f [ i ] [ j ]表示计算到这个点每一条路的集合,属性是找最大的和。原创 2023-02-12 20:37:08 · 51 阅读 · 0 评论