您的位置:首页 > 其它

POJ 1080 Human Gene Functions DP

2013-08-29 10:36 405 查看
注意初始化




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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: