HDOJ1080 基因序列相似度(动态规划)

本文介绍了一道基因序列相似度的问题,利用动态规划解决。给定两个基因序列,通过插入"-")符号使它们长度相同,并根据对应字符的得分矩阵计算最大得分。通过分析不同插入情况,建立子问题的递推关系,自底向上求解,避免了暴力求解的高计算量。并提供了一个示例程序来说明解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接: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对应-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值