POJ 1080 Human Gene Functions DP
2013-08-29 10:36
405 查看
注意初始化
View Code
View Code
#include<stdio.h> #include<string.h> int dp[103][103]; char a[103], b[103]; int f[7][7]; #define inf 1000000000 int max(int a, int b, int c) { int x = a > b ? a : b; return x > c ? x : c; } void init() { for(int i = 1; i <= 4; i++) f[i][i] = 5; f[1][2] = f[2][1] = -1; f[1][3] = f[3][1] = -2; f[1][4] = f[4][1] = -1; f[1][5] = f[5][1] = -3; f[2][3] = f[3][2] = -3; f[2][4] = f[4][2] = -2; f[2][5] = f[5][2] = -4; f[3][4] = f[4][3] = -2; f[3][5] = f[5][3] = -2; f[4][5] = f[5][4] = -1; } char update(char c) { if(c=='A')return 1; if(c=='C')return 2; if(c=='G')return 3; if(c=='T')return 4; if(c=='-')return 5; } int main() { int i, j, cas, l1, l2; init(); scanf("%d", &cas); while(cas--) { scanf("%d%s%d%s", &l1, a+1, &l2, b+1); for(i = 1; i <= l1; i++) a[i] = update(a[i]); for(i = 1; i <= l2; i++) b[i] = update(b[i]); dp[0][0] = 0; for(i = 1; i <= l1; i++) dp[i][0] = dp[i-1][0] + f[a[i]][5]; for(j = 1; j <= l2; j++) dp[0][j] = dp[0][j-1] + f[5][b[j]]; for(i = 1; i <= l1; i++) for(j = 1; j <= l2; j++) { int t1 = dp[i-1][j] + f[a[i]][5]; int t2 = dp[i][j-1] + f[5][b[j]]; int t3 = dp[i-1][j-1] + f[a[i]][b[j]]; dp[i][j] = max(t1, t2, t3); } printf("%d\n", dp[l1][l2]); } return 0; }
相关文章推荐
- Human Gene Functions poj 1080 dp
- POJ - 1080 Human Gene Functions (DP)
- POJ 1080 Human Gene Functions DP
- POJ-1080- Human Gene Functions-DP-LCS变形
- POJ 1080 Human Gene Functions DP
- POJ 1080 Human Gene Functions(dp)
- POJ 1080 Human Gene Functions DP(LCS)
- poj 1080 Human Gene Functions(dp)
- poj 1080 Human Gene Functions(动态规划:经典DP)
- poj 1080 Human Gene Functions(dp)
- poj--1080 Human Gene Functions(dp)
- POJ 1080 Human Gene Functions(dp)
- POJ 1080-Human Gene Functions(dp)
- POJ 1080-Human Gene Functions(DP)
- POJ 1080 Human Gene Functions(字符串匹配得分,dp)
- POJ-1080 Human Gene Functions DP
- POJ-1080 Human Gene Functions(DP)
- POJ 1080 Human Gene Functions (DP)
- POJ 1080-Human Gene Functions(DP:LCS变型)
- poj 1080 Human Gene Functions DP