LCS/LIS dp
文章平均质量分 87
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
2017多校训练赛第四场 HDU 6078 Wavel Sequence(dp+优化)
第四场多校,到现在才补…… 又是类似最长公共子串类型的dp。大致题意是给你两个序列a和b,然后问你能够选出多少个f和g映射,使得a[fi]==b[fi],而且a[f1]、a[f2]、a[f3]……a[fn]是波浪序列。 很容易想到的一个递推是dp[i][j][t]=Σdp[x][y][t^1](a[i]==b[j]且a[x]==b[y],同时满足波浪性),其中dp[i][j][t]表示序列a取到第i位,序列b取到第j位,而且当前是波峰(t==1)或者波谷(t==0)时的方案数原创 2017-09-19 19:44:18 · 509 阅读 · 0 评论 -
2017多校训练赛第九场 HDU 6170 Two String(dp)
最近发现,如果dp好能够快速解决很多问题,于是来补一波…… 这个题其实有点类似最长公共子串的dp,但是又略微有点不同。我们还是一样,设dp[i][j]表示第一个串取前i位,第二个串取前j位是否能够完成匹配。根据题意,如果第i位和第j位相等或者第j位为‘.',那么可以直接从前一位转移过来,有转移方程:dp[i][j]=dp[i-1][j-1]。 然后就是重点讨论一下当第j位为’*‘的时候。这个符号表示它前一位可以重复n次,这个n可以是0,而当n为0的时候相当于去掉两位(第j位和原创 2017-09-18 22:59:46 · 440 阅读 · 0 评论 -
CodeForces 946G Almost Increasing Array(dp)
LIS的题目见多了,但没发现自己连这么一个浅显的套路都不知道…… 大致题意:给你一个序列,然后问你最少替换几个数字可以使得这个序列变成Almost Increasing Array。这个序列可以,删除其中一个数字可以变成一个严格递增的序列。 首先是考虑简化问题。如果不考虑删除数字和严格,也即把一个序列替换成不下降的序列最少替换个数。这个问题很显然,用n-LIS即可。再进一步,如果要求严格递增呢?这就是一个在此之前居然不知道的经典套路:首先把每个数字减去其对应位权,然后再求原创 2018-03-18 11:28:04 · 504 阅读 · 0 评论 -
CSU 2020 Card Hand Sorting(暴力枚举+LIS DP)
大致题意:有n张扑克牌,大小规则有所不同,2是最小的,没有小丑,其他不变。现在按照顺序给出这n张牌,要求你进行排序,使得同花色的排连续的排在一起,然后每个花色内部要求递增或者递减。每次你可以把某一张牌移动到某两张牌中间或者最前和最后面。问最少的移动次数。 首先,还是回顾LIS相关的应用。显然就是求最小交换次数使得一个序列不上升或者不下降。所有同样也可以考虑用LIS来解决这道题。但考虑到有花色的限制,必须先去解决花色的问题。这里由于数据范围比较的小,可以考虑暴力的枚举最后的排列方式。由于花色只原创 2018-04-05 23:54:09 · 270 阅读 · 0 评论 -
CodeForces 1132G Greedy Subsequences(线段树 + LIS)
大致题意:求所有长度为K的连续子区间的最长上升子串长度。我们知道,朴素的LIS问题有O(nlogn)的解法,但是如果有很多个区间,显然也是做不了的。这里我们学习到了一种解决LIS问题的新姿势。我们考虑每一个数字a[i],令nxt[i]表示它右边第一个比它大的数字的位置。这样每一个节点要么只有一个nxt[i],要么没有nxt[i]。如果我们把每一个i与nxt[i]连一条边...原创 2019-04-11 10:20:50 · 325 阅读 · 0 评论