摘要: 转的题解:最长公共上升子序列(LCIS)的平方算法预备知识:动态规划的基本思想,LCS,LIS。问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列)。首先我们可以看到,这个问题具有相当多的重叠子问题。于是我们想到用DP搞。DP的首要任务是什么?定义状态。1定义状态F[i][j]表示以a串的前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度。为什么是这个而不是其他的状态定义?最重要的原因是我只会这个,还有一个原因是我知道这个定义能搞到平方的算法。而我这只会这个的原因是,这个状态定义实在是太好用了。这一点我后面再说。我们来考察一下这个这个状态。思考这个状态能转移到哪些状 阅读全文
posted @ 2011-07-14 17:50 zqynux 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 这题好难,我不写题解了,直接转发吧:KMP算法大家应该烂熟于心才好,这样碰到这样的题才能灵活运用。有时做题真的需要一点灵感。首先,这个题如果想要求出从每个位置开始的字串的匹配长度,那么O(n^2)以内的算法应该是很难的。但是,这个题要求的并不是“每个位置的长度”,而是“具有这样长度的位置数”。因而,灵活使用KMP算法自我匹配的性质,就能够解决这个问题。考虑下面的例子:A串:abbabbabababbababbaB串:abbabababba应用KMP算法,很容易得到B串的自我匹配是元素 a b b a b a b a b b a位置 1 2 3 4 5 6 7 8 9 10 11长度 0 0 . 阅读全文
posted @ 2011-07-14 11:51 zqynux 阅读(457) 评论(0) 推荐(0) 编辑