标签:思考 遇到 优化 定义 不能 lcis 代码 改变 状态
关于$dp$数组定义的思考
$lcis$最简单定义$f[x][y]$表示以$x$,$y$结尾的最长子序列,$n^4$看上去很难优化
$lcs$本来也是$n^4$回忆怎么优化的,$f[x][y]$原本表示以$x$,$y$结尾的最长子序列,然而数组定义稍微改变一下表示枚举到$x$,$y$为止的最长子序列,定义成了类似于最长前缀的性质
$f[x][y]=max(f[x][y-1],f[x-1][y])$再$f[x][y]=max(f[x][y],f[x-1][y-1]+1)$为什么这样定义,我们并不关心之前转移具体是多少,我们要找的是之前最大的,我们并不关心之前状态是什么,所以这样定义是对的,
$lcis$也可以用这个优化一下,但不能完全定义成前缀最大值,我们要保证公共的前提下还要保证单调上升,但我们注意到$i,j$表示相同,那么我们可以舍弃掉一维来优化
$f[i][j]$定义成在$A_1-A_i$ 以$B_j$为结尾的最长公共子序列是多少
考虑转移
$f[i][j]=f[i-1][j](if(b[j]!=a[i]))$当前点不是合法转移点,直接继承
$f[i][j]=max(f[i-1][k])+1(b[k]<b[j])$又$b[j]==a[i]$(当前点)则$f[i][j]=max(f[i-1][k])+1(b[k]<a[i])$
然后考虑再次优化,再拿一个最大前缀优化即可
事实上,我之前做过类似定义的,一个树上$dp$叫消防局的建立,优化也是这样优化,自己做题就像没有任何收获
遇到题,不要一味看题解,抄代码,多思考,是做一名合格$oier$所需的,这些我都没做到自己码力越来越弱,又越来越颓废,我沦落到现在这个底部是罪有应得,但还是希望自己以后能够金盆洗手,改过自新
标签:思考 遇到 优化 定义 不能 lcis 代码 改变 状态
原文地址:https://www.cnblogs.com/znsbc-13/p/11627163.html