dp。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int inf = 1e9;
int T;
int n, n2;
string a, b;
int s[89][89];
int dp[105][105];
int main()
{
s['A']['A'] = 5, s['A']['C'] = -1, s['A']['G'] = -2, s['A']['T'] = -1, s['A']['-'] = -3;
s['C']['A'] = -1, s['C']['C'] = 5, s['C']['G'] = -3, s['C']['T'] = -2, s['C']['-'] = -4;
s['G']['A'] = -2, s['G']['C'] = -3, s['G']['G'] = 5, s['G']['T'] = -2, s['G']['-'] = -2;
s['T']['A'] = -1, s['T']['C'] = -2, s['T']['G'] = -2, s['T']['T'] = 5, s['T']['-'] = -1;
s['-']['A'] = -3, s['-']['C'] = -4, s['-']['G'] = -2, s['-']['T'] = -1;
cin >> T;
while(T --)
{
fill(dp[0], dp[0] + 105 * 105, -inf);
cin >> n >> a;
cin >> n2 >> b;
dp[0][0] = 0;
for(int i = 1; i <= n; i ++)
dp[i][0] = dp[i - 1][0] + s[a[i - 1]]['-'];
for(int i = 1; i <= n2; i ++)
dp[0][i] = dp[0][i - 1] + s['-'][b[i - 1]];
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n2; j ++)
{
dp[i][j] = dp[i - 1][j - 1] + s[a[i - 1]][b[j - 1]];
dp[i][j] = max(dp[i][j], dp[i - 1][j] + s[a[i - 1]]['-']);
dp[i][j] = max(dp[i][j], dp[i][j - 1] + s['-'][b[j - 1]]);
}
cout << dp[n][n2] << endl;
}
// system("pause");
return 0;
}