#include<bits/stdc++.h>
using namespace std;
char s[1010];
int a[1010];
int b[1010];
int c[5][5]=
{
{0,-3,-4,-2,-1},
{-3,5,-1,-2,-1},
{-4,-1,5,-3,-2},
{-2,-2,-3,5,-2},
{-1,-1,-2,-2,5}
};
int dp[1010][1010];
int main()
{
int n,m;
scanf("%d ",&n);
for(int i=1;i<=n;i++)
{
scanf("%c",&s[i]);
if(s[i]=='A')a[i]=1;
if(s[i]=='C')a[i]=2;
if(s[i]=='G')a[i]=3;
if(s[i]=='T')a[i]=4;
}
scanf("%d ",&m);
for(int i=1;i<=m;i++)
{
scanf("%c",&s[i]);
if(s[i]=='A')b[i]=1;
if(s[i]=='C')b[i]=2;
if(s[i]=='G')b[i]=3;
if(s[i]=='T')b[i]=4;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j]=-10000;
}
}
for(int i=1;i<=n;i++)dp[i][0]=dp[i-1][0]+c[a[i]][0];
for(int i=1;i<=m;i++)dp[0][i]=dp[0][i-1]+c[0][b[i]];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j]=max(dp[i][j],dp[i-1][j]+c[a[i]][0]);
dp[i][j]=max(dp[i][j],dp[i][j-1]+c[0][b[j]]);
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+c[a[i]][b[j]]);
}
}
printf("%d",dp[n][m]);
return 0;
}
luogu1140:相似基因
最新推荐文章于 2023-11-20 20:52:41 发布