题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1080
题目大意:基因序列里面有四个字符ACTG,对于个基因序列,从中插入“-”符号让两个基因序列一样长。对于ACGT-这五个符号,任意两个符号都有一个对应的得分,给定一个对应符号的得分矩阵,求两个基因序列插入-符号以后得分的最大值。
例如:AGTGATG和GTTAG这两个基因序列,插入-符号使两个基因序列等长,AGTGAT-G和-GT--TAG是其中一种方案,在这种方案中,A对应-,G对应G,T对应T,G对应-,A对应-。。。。。。。根据对应元素的矩阵计算总得分。我们的目标是计算得分的最大值。
本题如果暴力解,列出所有可能插入-符号的情况,计算量非常大,根本行不通,而且会产生大量的子问题的重复计算。所以本题选用动态规划的方法来做。
首先,动态规划问题都是做出某种选择(一般通过遍历来确定哪种选择是最优的选择),确定了规模更小的子问题。通过子问题构建和原问题的递推关系式,进而求解原问题(一般采取自底向上的方法)。
我们以TAGCTAG和ATTGC这两个基因序列为例,设f[i][j]表示第一个序列前i个元素和第二个序列前j个元素的最大得分,我们的目标是求f[7][5]。当插入-符号两个序列等长以后,最后一个元素只有三种可能:
1、G对应C,此时产生子问题f[6][4]。此时f[7][5]=GC对应的分数+f[6][4]
2、G对应-