-
//zoj1027 Human Gene Functions
-
//Accepted 1027 C ++ 00:00.00 880K
-
#include <cstdio>
-
#include <iostream>
-
using namespace std;
-
#define MAXN 101
-
int max(int a,int b){return a>b?a:b;}
-
int max3(int a,int b,int c){return max(max(a,b),max(b,c));}
-
const int score[5][5]={
-
{5,-1,-2,-1,-3},
-
{-1,5,-3,-2,-4},
-
{-2,-3,5,-2,-2},
-
{-1,-2,-2,5,-1},
-
{-3,-4,-2,-1,0}
-
};
-
int key(char c){
-
if (c=='A') return 0;
-
if (c=='C') return 1;
-
if (c=='G') return 2;
-
if (c=='T') return 3;
-
return 4;
-
}
-
void solve()
-
{
-
int i,j,len1,len2;
-
char dna[MAXN];
-
int s1[MAXN],s2[MAXN],f[MAXN][MAXN];
-
cin >> len1 >> dna;
-
for (i=0; i<len1; ++i) s1[i] = key(dna[i]);
-
cin >> len2 >> dna;
-
for (i=0; i<len2; ++i) s2[i] = key(dna[i]);
-
f[0][0] = 0;
-
for (i=1; i<=len1; ++i) f[i][0] = f[i-1][0]+score[s1[i-1]][4];
-
for (i=1; i<=len2; ++i) f[0][i] = f[0][i-1]+score[4][s2[i-1]];
-
for (i=1; i<=len1; ++i)
-
for (j=1; j<=len2; ++j)
-
f[i][j] = max3(f[i-1][j]+score[s1[i-1]][4], f[i][j-1]+score[4][s2[j-1]], f[i-1][j-1]+score[s1[i-1]][s2[j-1]]);
-
cout << f[len1][len2] << endl;
-
}
-
-
int main()
-
{
-
#ifndef ONLINE_JUDGE
-
freopen("1027.txt","r",stdin);
-
#endif
-
int t;
-
while (scanf("%d",&t)!=EOF)
-
while (t--)
-
solve();
-
#ifndef ONLINE_JUDGE
-
fclose(stdin);
-
#endif
-
return 0;
-
}
zoj1027 Human Gene Functions
最新推荐文章于 2017-07-13 14:30:02 发布