POJ-1080-Human Gene Functions-LCS变体,动态规划,DP

 

类似最长公共子串的一道动态规划题目。

 

题意

给定两个基因字符串,用A,C,G,T表示其组成成分。若两个基因的长度不一样,可以通过在两个串中分别添加空格使其长度一致。当其长度一样后,分别计算对应位置上的两个字母的分数,并将所有的分数相加便得到两个串的相似度分数。求,两个基因串的最高分数。

 

分析

给定两个基因串Gn, Gm,要求其最高分数f(n, m),有以下两种情况:

1)G[n] = G[m],则f(n, m) = f(n-1, m-1) + 5;

2)G[n] != G[m], 则可分三种情况:

i.在Gn后添加空格,其分数为f(n, m) = f(n, m-1) + scores[4][Index(G[m])];

ii. 在Gm后添加空格,其分数为f(n, m) = f(n-1, m) + scores[Index(G[n])][4];

iii. 直接使用Gn, Gm的最后两个字配对,其分数为f(n, m) = f(n-1, m-1) + scores[Index(G[n])][Index(G[m])];

其中,Index()返回字母在分数矩阵中的所在行或列。(详见原题分数矩阵)

再取i, ii, iii这三种情况的最大值即为Gn, Gm的最高分数。

 

代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值