如果我wa了#8
查看原帖
如果我wa了#8
365532
Mr_ll楼主2022/7/18 18:59
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define M(a,b,c) max(a,max(b,c))
using namespace std;
const int N=3e3+10;
int a[N],b[N],f[N][N][3],l[5][5],A,B;
string sa,sb;
int main(){
	cin>>sa>>sb;
	int la=sa.length(),lb=sb.length();
	for(int i=0;i<la;i++){
		if(sa[i]=='A') a[i+1]=1;
		if(sa[i]=='T') a[i+1]=2;
		if(sa[i]=='G') a[i+1]=3;
		if(sa[i]=='C') a[i+1]=4;
	}
	for(int i=0;i<lb;i++){
		if(sb[i]=='A') b[i+1]=1;
		if(sb[i]=='T') b[i+1]=2;
		if(sb[i]=='G') b[i+1]=3;
		if(sb[i]=='C') b[i+1]=4;
	}
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			scanf("%d",&l[i][j]);
		}
	}
	scanf("%d%d",&A,&B);
	memset(f,-0x3f,sizeof(f));
	f[0][0][0]=f[0][0][1]=f[0][0][2]=0;
	for(int i=1;i<=la;i++){
		for(int j=1;j<=lb;j++){
			if(!(i+j)) continue;
			if(i&&j) f[i][j][0]=M(f[i-1][j-1][0],f[i-1][j-1][1],f[i-1][j-1][2])+l[a[i]][b[j]];
			if(i) f[i][j][1]=M(f[i-1][j][0]-A,f[i-1][j][1]-B,f[i-1][j][2]-A);
			if(j) f[i][j][2]=M(f[i][j-1][0]-A,f[i][j-1][1]-A,f[i][j-1][2]-B);
		}
	}
	printf("%d\n",M(f[la][lb][0],f[la][lb][1],f[la][lb][2]));
	return 0;
}
2022/7/18 18:59
加载中...