不要打我 ,存代码
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define maxx 105 int len1, len2, dp[maxx][maxx], s[200][200]; char g1[maxx], g2[maxx]; void init() { s['A']['A'] = s['C']['C'] = s['G']['G'] = s['T']['T'] = 5; s['A']['C'] = s['C']['A'] = s['A']['T'] = s['T']['A'] = -1; s['A']['G'] = s['G']['A'] = s['C']['T'] = s['T']['C'] = -2; s['G']['T'] = s['T']['G'] = s['G']['-'] = s['-']['G'] = -2; s['A']['-'] = s['-']['A'] = s['C']['G'] = s['G']['C'] = -3; s['T']['-'] = s['-']['T'] = -1; s['C']['-'] = s['-']['C'] = -4; } int main() { int n; init(); scanf ("%d", &n); while (n--) { memset(dp,0,sizeof(dp)); scanf ("%d%s%d%s", &len1, g1+1, &len2, g2+1); int i, j; dp[0][0] = 0; for (i = 1; i <= len2; i++) dp[0][i] = dp[0][i-1] + s['-'][g2[i]]; for (i = 1; i <= len1; i++) dp[i][0] = dp[i-1][0] + s[g1[i]]['-']; for (i = 1; i <= len1; i++) { for (j = 1; j <= len2; j++) dp[i][j] = max (dp[i-1][j-1] + s[g1[i]][g2[j]], max(dp[i][j-1] + s['-'][g2[j]], dp[i-1][j] + s[g1[i]]['-'])); } printf("%d\n",dp[len1][len2]); } return 0; }
时间: 2024-10-10 13:28:54