1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4 using namespace std;
5
6 int lena,lenb;
7 char a[101],b[101];
8 int d[103][103][3] = {0};
9 int ans =0;
10 int cov[5][5]={{5,-1,-2,-1,-3},
11 {-1,5,-3,-2,-4},
12 {-2,-3,5,-2,-2},
13 {-1,-2,-2,5,-1},
14 {-3,-4,-2,-1,0}};
15 int gts(char a)
16 {
17 if(a == 'A')return 0;
18 if(a == 'C')return 1;
19 if(a == 'G')return 2;
20 if(a == 'T')return 3;
21 if(a == '-')return 4;
22 }
23 int gt(char a,char b)
24 {
25 int x,y;
26 x = gts(a);
27 y = gts(b);
28 return cov[x][y];
29 }
30 int maxs(int a,int b){
31 return a > b?a:b;
32 }
33 void dp()
34 {
35 int x,y;
36 for(x = 1; x<=lena; ++x){
37 for(y = 1; y<=lenb; ++y){
38 int ma = 0;
39 if(x > 1 && y >1)ma = maxs(d[x-1][y-1][0],maxs(d[x-1][y][1],d[x][y-1][2]));
40 else if(x == 1 && y >1)ma = d[x][y-1][2];//such that a[x] + '-',only use a[] before
41 else if(x > 1 && y ==1)ma = d[x-1][y][1];//such like '-' + b[y],only use b[] before
42 d[x][y][0] = ma + gt(a[x-1],b[y-1]);
43 d[x][y][1] = ma + gt(a[x-1],'-');
44 d[x][y][2] = ma + gt('-',b[y-1]);
45 }
46 }
47 ans = -1000;
48 d[lena][lenb][1] += gt('-',b[lenb-1]);//vip
49 d[lena][lenb][2] += gt(a[lena-1],'-');// finish until now
50 for(x=0; x<3; ++x)ans = maxs(ans,d[lena][lenb][x]);
51 return ;
52 }
53
54 int main()
55 {
56 int cas=0;
57 cin >> cas;
58 while(cas--){
59 cin >> lena >> a ;
60 cin >> lenb >> b;
61 dp();
62 printf("%d\n",ans);///
63 }
64 return 0;
65 }