#include #include using namespace std; const int N = 127; int M[N][N], dp[N][N]; char s1[N], s2[N]; int main() { { M['A']['A'] = +5; M['A']['C'] = -1; M['A']['G'] = -2; M['A']['T'] = -1; M['A']['-'] = -3; M['C']['A'] = -1; M['C']['C'] = +5; M['C']['G'] = -3; M['C']['T'] = -2; M['C']['-'] = -4; M['G']['A'] = -2; M['G']['C'] = -3; M['G']['G'] = +5; M['G']['T'] = -2; M['G']['-'] = -2; M['T']['A'] = -1; M['T']['C'] = -2; M['T']['G'] = -2; M['T']['T'] = +5; M['T']['-'] = -1; M['-']['A'] = -3; M['-']['C'] = -4; M['-']['G'] = -2; M['-']['T'] = -1; } int T, l1, l2; scanf("%d", &T); while (T--) { scanf("%d%s%d%s", &l1, s1 + 1, &l2, s2 + 1); for (int i = 1; i <= l1; i++) dp[i][0] = dp[i - 1][0] + M[s1[i]]['-']; for (int j = 1; j <= l2; j++) dp[0][j] = dp[0][j - 1] + M['-'][s2[j]]; for (int i = 1; i <= l1; i++) for (int j = 1; j <= l2; j++) dp[i][j] = max(dp[i - 1][j - 1] + M[s1[i]][s2[j]], max(dp[i - 1][j] + M[s1[i]]['-'], dp[i][j - 1] + M['-'][s2[j]])); printf("%d\n", dp[l1][l2]); } return 0; }