#include<stdio.h>
#include<string.h>
char a[105],b[105];
int s[256][256];
int dp[105][105]={0};
int main(){
int t,n,m,i,j;
scanf("%d",&t);
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,s['-']['-']=0;
while(t--){
scanf("%d%s%d%s",&n,&a[1],&m,&b[1]);
memset(dp,-1,sizeof(dp));
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
dp[i][j]=-999999999;
dp[0][0]=0;
for(i=0;i<=n;i++){
for(j=0;j<=m;j++){
if(!i&&!j) continue;
if(i-1>=0 && dp[i-1][j]+s[a[i]]['-']>dp[i][j])
dp[i][j]=dp[i-1][j]+s[a[i]]['-'];
if(j-1>=0 && dp[i][j-1]+s['-'][b[j]]>dp[i][j])
dp[i][j]=dp[i][j-1]+s['-'][b[j]];
if(i-1>=0 && j-1>=0 && dp[i-1][j-1]+s[a[i]][b[j]]>dp[i][j])
dp[i][j]=dp[i-1][j-1]+s[a[i]][b[j]];
}
}
printf("%d\n",dp[n][m]);
}
}
沒有留言:
張貼留言