摘要: 对于一般的LCS问题,都属于NP问题。当数列的量为一定的时,都可以采用动态规划去解决。动态规划的一个计算最长公共子序列的方法如下,以两个序列 X、Y 为例子:设有二维数组 f[i][j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有:f[1][1] = same(1,1)f[i][j] = max{f[i-1][j-1] + same(i,j),f[i-1][j],f[i][j-1]}其中,same(a,b)当 X 的第 a 位与 Y 的第 b 位完全相同时为“1”,否则为“0”。此时,f[i][j]中最大的数便是 X 和 Y 的最长公共子序列的长度,依据该数组回溯, 阅读全文
posted @ 2013-03-30 17:34 在河之博 阅读(339) 评论(0) 推荐(0) 编辑
摘要: UVA103Stacking Boxes在这个问题中,你要分析一组n维盒子的某个性质。你要确定出盒子的最长嵌套串,也就是说一系列的盒子b1、b2、……、bk,一个套一个,使所有的bi都嵌套在bi+1内。对于一个盒子D = (d1, d2, ..., dn)和另一个盒子E = (e1, e2, ..., en),如果存在一种di的排列,使重排的每个维度的值都小于盒子E中对应维度的值,则盒子D可嵌入盒子E。这个过程和旋转盒子D,看它是否能套入E的过程类似。然而,若需满足所有维度的排列,盒子D必须是可以扭曲的,而不仅仅是旋转。定义嵌套关系如下:盒子D = (d1, d2, ..., dn)和E = 阅读全文
posted @ 2013-03-30 16:13 在河之博 阅读(1137) 评论(0) 推荐(0) 编辑