结题报告
自己慢慢领悟咯。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int score[][5]={
5,-1,-2,-1,-3,
-1,5,-3,-2,-4,
-2,-3,5,-2,-2,
-1,-2,-2,5,-1,
-3,-4,-2,-1,0};
char a[105],b[105];
int dp[105][105];
int la,lb;
map<char,int> m;
int mymax(int a,int b,int c)
{
int t=max(a,b);
t=max(t,c);
return t;
}
int main()
{
m['A']=0,m['C']=1,m['G']=2,m['T']=3,m['-']=4;
int n;
cin>>n;
int t1,t2,t3;
while(n--)
{
memset(dp,0,sizeof(dp));
scanf("%d%s",&la,a+1);
scanf("%d%s",&lb,b+1);
dp[0][0]=0;
for(int i=1;i<=la;i++)
dp[i][0]=dp[i-1][0]+score[m[a[i]]][m['-']];
for(int j=1;j<=lb;j++)
dp[0][j]=dp[0][j-1]+score[m['-']][m[b[j]]];
for(int i=1;i<=la;i++)
for(int j=1;j<=lb;j++)
{
t1=dp[i-1][j-1]+score[m[a[i]]][m[b[j]]];
t2=dp[i-1][j]+score[m[a[i]]][m['-']];
t3=dp[i][j-1]+score[m['-']][m[b[j]]];
dp[i][j]=mymax(t1,t2,t3);
}
printf("%d\n",dp[la][lb]);
}
return 0;
}