1080

来源:互联网 发布:淘宝上的军品是真的么 编辑:程序博客网 时间:2024/06/16 16:18
#include <cstdio>#include <string>using namespace std;char map[128][128];inline void init(){map['A']['A'] = 5, map['A']['C'] = -1, map['A']['G'] = -2, map['A']['T'] = -1, map['A']['-'] = -3;map['C']['A'] = -1, map['C']['C'] = 5, map['C']['G'] = -3, map['C']['T'] = -2, map['C']['-'] = -4;map['G']['A'] = -2, map['G']['C'] = -3, map['G']['G'] = 5, map['G']['T'] = -2, map['G']['-'] = -2;map['T']['A'] = -1, map['T']['C'] = -2, map['T']['G'] = -2, map['T']['T'] = 5, map['T']['-'] = -1;map['-']['A'] = -3, map['-']['C'] = -4, map['-']['G'] = -2, map['-']['T'] = -1, map['-']['-'] = 0;}inline int max3(const int t1, const int t2, const int t3){return max(max(t1, t2), t3);}int main(){init();int t;scanf("%d", &t);for(; t; --t){int len1, len2, dp[101][101] = {0};char ser1[102], ser2[102];scanf("%d%s%d%s", &len1, &ser1[1], &len2, &ser2[1]);for(int i = 1; i <= len2; ++i){dp[0][i] = dp[0][i - 1] + map['-'][ser2[i]];}for(int i = 1; i <= len1; ++i){dp[i][0] = dp[i - 1][0] + map['-'][ser1[i]];for(int j = 1; j <= len2; ++j){const int t1 = dp[i - 1][j] + map['-'][ser1[i]];const int t2 = dp[i - 1][j - 1] + map[ser2[j]][ser1[i]];const int t3 = dp[i][j - 1] + map['-'][ser2[j]];dp[i][j] = max3(t1, t2, t3);}}printf("%d\n", dp[len1][len2]);}return 0;}