@z_z_b_ 大佬快帮我看看呀Orz
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
#define MAXN 10010
int a[MAXN];
int b[MAXN];
int w[][6]={
0,0,0,0,0,0,
0,5,-1,-2,-1,-3,
0,-1,5,-3,-2,-4,
0,-2,-3,5,-2,-2,
0,-1,-2,-2,5,-1,
0,-3,-4,-2,-1,0
};
int n,m;
int dp[MAXN][MAXN];
int main(){
char c;
cin>>n;
for(int i=1;i<=n;i++){
scanf(" %c",&c);
if(c=='A')a[i]=1;
if(c=='C')a[i]=2;
if(c=='G')a[i]=3;
if(c=='T')a[i]=4;
}
cin>>m;
for(int i=1;i<=m;i++){
scanf(" %c",&c);
if(c=='A')b[i]=1;
if(c=='C')b[i]=2;
if(c=='G')b[i]=3;
if(c=='T')b[i]=4;
}
for(int i=1;i<=n;i++)dp[i][0]=dp[i-1][0]+w[a[i]][5];
for(int i=1;i<=m;i++)dp[0][i]=dp[0][i-1]+w[5][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-1]+w[a[i]][b[j]]);
dp[i][j]=max(dp[i-1][j]+w[a[i]][5],dp[i][j]);
dp[i][j]=max(dp[i][j-1]+w[5][b[j]],dp[i][j]);
}
cout<<dp[n][m];
return 0;
}
这么完美,想不出哪里错了