摘要: 原文链接 http://www.cnblogs.com/liu-runda/p/6193690.html DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推。例如斐波那契数列的递推求法可以不严谨地认为是DP。当然DP的状态也可以是二 阅读全文
posted @ 2017-05-11 19:50 zht467 阅读(229) 评论(0) 推荐(0)
摘要: 传送门 有点类似LCS,可以把 a[i] 在 b 串中的位置用一个链式前向星串起来,由于链式前向星是从后往前遍历,所以可以直接搞。 状态转移方程 f[i] = max(f[j]) + 1 ( 1 <= j < i && a[i] == b[j] ) ——代码 1 #include <cstdio> 阅读全文
posted @ 2017-05-11 18:51 zht467 阅读(218) 评论(0) 推荐(0)
摘要: 传送门 无重复元素的LCS问题 n2 做法不说了。 nlogn 做法 —— 因为LCS问题求的是公共子序列,顺序不影响答案,影响答案的只是两个串的元素是否相同,所以可以交换元素位置。 首先简化一下问题,假设P1恰好为单调递增的1,2,3,...n,那么很显然答案就是P2的最长上升子序列的长度 问题是 阅读全文
posted @ 2017-05-11 16:10 zht467 阅读(261) 评论(0) 推荐(0)
摘要: 传送门 DP方程 f[i] = f[j] + (a[j] <= a[i]) ( i - k < j < i ) 要使 f[i] 最小,需要等号后面的值最小,可以用单调队列来维护。 至于如何维护,具体看代码。 ——代码 1 #include <cstdio> 2 3 const int MAXN = 阅读全文
posted @ 2017-05-11 11:45 zht467 阅读(128) 评论(0) 推荐(0)
摘要: 传送门 题意 给出一棵树,求离每个节点最远的点的距离 思路 对于我这种菜鸡,真是难啊。 每个点的距离它最远的点,除了在它子树中的,还有在它子树之外的,所以这几个状态都得表示出来。 我们能够很简单的求出每个点到以它为根的子树的最远点的距离,dfs 即可。 设 f[i][0] 表示点 i 到以它为根的子 阅读全文
posted @ 2017-05-11 10:11 zht467 阅读(191) 评论(0) 推荐(0)