首页 > 其他 > 详细

HDU 1080 Human Gene Functions

时间:2014-07-30 20:33:04      阅读:256      评论:0      收藏:0      [点我收藏+]

最长公共子序列的变形

题目大意:给出两个基因序列,求这两个序列的最大相似度。

题目中的表格给出了两两脱氧核苷酸的相似度。

 

状态转移方程为:

dp[i][j] = max(dp[i-1][j]+Similarity(s1[i], ‘-‘),
                     dp[i][j-1]+Similarity(s2[j], ‘-‘),
                     dp[i-1][j-1]+Similarity(s1[i], s2[j]));

注意边界的初始化。

 

bubuko.com,布布扣
 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 char s1[105], s2[105];
 9 int dp[105][105];
10 
11 int table[5][5] = {
12      5, -1, -2, -1, -3,
13     -1,  5, -3, -2, -4,
14     -2, -3,  5, -2, -2,
15     -1, -2, -2,  5, -1,
16     -3, -4, -2, -1,  0
17 }; 
18 
19 int max(int a, int b, int c)
20 {
21     return max(max(a, b), c);
22 }
23 
24 int f(char c)
25 {
26     if(c == A)    return 0;
27     if(c == C)    return 1;
28     if(c == G)    return 2;
29     if(c == T)    return 3;
30     if(c == -)    return 4;
31 }
32 
33 int Similarity(char c1, char c2)
34 {    return table[f(c1)][f(c2)];    }
35 
36 int main(void)
37 {
38     #ifdef LOCAL
39         freopen("1080in.txt", "r", stdin);
40     #endif
41 
42     int T;
43     scanf("%d", &T);
44     while(T--)
45     {
46         int len1, len2, i, j;
47         dp[0][0] = 0;
48         scanf("%d %s", &len1, s1+1);
49         scanf("%d %s", &len2, s2+1);
50         for(i = 1; i <= len1; ++i)
51             dp[i][0] = dp[i-1][0] + Similarity(s1[i], -);
52         for(i = 1; i <= len2; ++i)
53             dp[0][i] = dp[0][i-1] + Similarity(s2[i], -);
54         for(i = 1; i <= len1; ++i)
55             for(j = 1; j <= len2; ++j)
56                 dp[i][j] = max(dp[i-1][j]+Similarity(s1[i], -),
57                                 dp[i][j-1]+Similarity(s2[j], -),
58                                 dp[i-1][j-1]+Similarity(s1[i], s2[j]));
59 
60         printf("%d\n", dp[len1][len2]);
61     }
62     return 0;
63 }
代码君

 

HDU 1080 Human Gene Functions,布布扣,bubuko.com

HDU 1080 Human Gene Functions

原文:http://www.cnblogs.com/AOQNRMGYXLMV/p/3878730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!