![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LIS
qkoqhh
这个作者很懒,什么都没留下…
展开
-
XDOJ 1233
一道假LCS。。。 原LCS做法,给数组a,b,d[i][j]为以a[i],b[j]为结尾构成的子列的lcs d[i][j]=max{max{d[i-1][k](k=1-j)}+a[i]==b[j]} 因为是1-n的排列所以每个数的位置都可以提前确定哪个位置的b[j]==a[i],但由于要维护前缀和所以想到了树状数组(好吧其实是线段树qaq)。。。不过总感觉对单点进行一次标记就用线段树有点大...原创 2017-09-30 16:27:05 · 348 阅读 · 0 评论 -
XDOJ 1107
见标题滚。。。 这个题目和我之前想出的题一模一样诶。。。好激动。。 其实蛮简单,先按一维排序后求LIS就好了。。 #include #define inc(i,l,r) for(int i=l;i<=r;i++) #define dec(i,l,r) for(int i=l;i>=r;i--) #define link(x) for(edge *j=h[x];j;j=j->next) #de原创 2017-09-30 20:57:57 · 459 阅读 · 2 评论 -
hdu6357(DP姿势 LIS->LCS)
这个题想了好久。。其实已经想到枚举x和y了然后就不造怎么dp。。 这个姿势比较特殊,得学一下。。 枚举完x和y之后先把简化的序列b构造出来,即1 2 3 ..x y y-1 y-2 ... x+1 x y y+1 ... n这样。。 然后以类似lcs的方式去匹配b,当然要算重复的点。。 具体来说就是设d[i][j]为匹配到原序列i位置和b序列中的j位置的a的最长序列 那么d[i][j]=...原创 2018-08-08 01:14:03 · 548 阅读 · 0 评论