您的位置:首页 > 其它

Pku acm 1080 Humman Gene Function 动态规划题目解题报告(八)

2008-01-01 11:58 531 查看
http://acm.pku.edu.cn/JudgeOnline/problem?id=1080
这是一道比较经典的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]));
Null
A
G
T
G
A
T
G
Null
-3
-5
-6
-8
-11
-12
-14
G
-2
T
-3
T
-4
A
-7
G
-9
第0行,第0列表示null和字符串匹配情况,结果是’-’和各个字符的累加:
opt[num2][num1]即为所求结果。
for(i=1;i<=num1;i++)
opt[0][i] = opt[0][i-1]+table('-',a[i-1]);
for(i=1;i<=num2;i++)
opt[i][0] = opt[i-1][0]+table('-',b[i-1]);

带有详细注释的代码可以在http://download.csdn.net/user/china8848/获得
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐