.&
1
1
EA3$3-.- .(&
带有详细注释的代码可以在 233!获得
Pku acm 2250 Compromise 动态规划题目总结(六)
"
这个也是求最长公共字串,只是相比 5E3I 需要记录最长公共字
串的构成,此时箭头的标记就用上了0在程序中,用 -.-.存放标记, 表示朝向左上方,
表示指向上,% 表示指向左。3-.-.存放当前最大字串长度。在求最优解时,顺着箭
头从后向前寻找公共字串的序号,记录下来,输出即可。该算法在算法导论中有详细的讲
解。
带有详细注释的代码可以在 233!获得。
Pku acm 1159 Palindrome 动态规划题目总结(七)
"4
给一个字符串,求这个字符串最少增加几个字符能变成回文,如 F 可以增加
个字符变为回文:FF。通过这样的结论可以和最长公共子串联系起来$未证明(:E
和 EJ$注EJ是 E 的反串(的最长公共子串其实一定是回文的。这样我们就可以借助 3 来解
决该题,即用 3 的长度减去 3 的值即可。核心的 # 代码为:
%85E$302EKL$3(#3$(E$((&
函数 85E 返回两个 3 的 3 的长度
带有详细注释的代码可以在 233!获得
Pku acm 1080 Humman Gene Function 动态规划题目总结(八)
这是一道比较经典的 DP,两串基因序列包含 A、C、G、T,每两个字母间的匹配都会
产生一个相似值,求基因序列(字符串)匹配的最大值。
这题有点像求最长公共子序列。只不过把求最大长度改成了求最大的匹配值。用二维
数组 opt[i][j]记录字符串 a 中的前 i 个字符与字符串 b 中的前 j 个字符匹配所产生的最大值。
假如已知 AG 和 GT 的最大匹配值,AGT 和 GT 的最大匹配值,AG 和 GTT 的最大匹配值,
求 AGT 和 GTT 的最大匹配值,这个值是 AG 和 GT 的最大匹配值加上 T 和 T 的匹配值,
AGT 和 GT 的最大匹配值加上 T 和-的匹配值,AG 和 GTT 的最大匹配值加上-和 T 的匹配
值中的最大值,所以状态转移方程:
opt[i][j] = max(opt[i-1][j-1]+table(b[i-1],a[j-1]),opt[i][j-1]+table('-',a[j-1]),opt[i-1][j]
+table('-',b[i-1]));
? F M 7 M F 7 M
? % %" % % % % %!