蒟蒻#3~#10全wa求调
查看原帖
蒟蒻#3~#10全wa求调
1023140
dedseclossr楼主2023/9/24 15:44
#include <bits/stdc++.h>
using namespace std;
const int MAX = 3300;
int dna1[MAX],dna2[MAX];
int d[5][5],dp[MAX][MAX][3];
//0 dna1、dna2均以字符结尾
//1 dna1以空格结尾
//2 dna2以空格结尾
int A,B,m=0,n=0;
unordered_map<char,int> dna{
	{'A',1},
	{'T',2},
	{'G',3},
	{'C',4}
};

inline int maxnum(int a,int b,int c)
{
	return max(a,max(b,c));
}

main()
{
	char ch;
    memset(dp,0,sizeof(dp));
	while(1) 
	{
		ch = getchar();
		if(ch=='\n') break;
		dna1[++m] = dna[ch];
	}
	while(1)
	{
		ch = getchar();
		if(ch=='\n') break;
		dna2[++n] = dna[ch];
	} 
	for(int i=1;i<=4;i++)
	{
		for(int j=1;j<=4;j++) cin>>d[i][j];
	}
	cin>>A>>B;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{	
			dp[i][j][0] = maxnum(dp[i-1][j-1][0],dp[i-1][j-1][1],dp[i-1][j-1][2])+d[dna1[i]][dna2[j]];
			dp[i][j][1] = maxnum(dp[i][j-1][0]-A,dp[i][j-1][1]-B,dp[i][j-1][2]-A);
			dp[i][j][2] = maxnum(dp[i-1][j][0]-A,dp[i-1][j][1]-A,dp[i-1][j][2]-B);
		}
	}
	cout<<maxnum(dp[m][n][0],dp[m][n][1],dp[m][n][2])<<endl;
	return 0;
}
2023/9/24 15:44
加载中...