我菜,看了别人要写初始化依旧20 pts
查看原帖
我菜,看了别人要写初始化依旧20 pts
926886
kind_Ygg楼主2024/10/3 20:21
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=3e3+5;
int A,B;
string a,b;
int d[5][5];
int dp[N][N][3];
int ls(int k)
{
	return k?-A:-B;
}
int turn(char s)
{
	switch(s) 
	{
		case 'A': return 1;
		case 'T': return 2;
		case 'G': return 3;
		default: return 4;
	}
}
signed main()
{
	cin>>a>>b;
	for(int i=1;i<=4;i++)
		for(int j=1;j<=4;j++)
			cin>>d[i][j];
	cin>>A>>B;
	int n=a.size(),m=b.size();
	a=' '+a,b=' '+b;
	dp[1][0][2]=dp[0][1][1]=-A;
	for(int i=2;i<=n;i++) dp[i][0][2]=dp[i-1][0][2]-B;
	for(int i=2;i<=m;i++) dp[0][i][1]=dp[0][i-1][1]-B;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			dp[i][j][0]=max(dp[i-1][j-1][0],max(dp[i-1][j-1][1],dp[i-1][j-1][2]))+d[turn(a[i])][turn(b[j])];
			dp[i][j][1]=max(max(dp[i][j-1][0],dp[i][j-1][2])+ls(1),dp[i][j-1][1]+ls(0));
			dp[i][j][2]=max(max(dp[i-1][j][0],dp[i-1][j][1])+ls(1),dp[i-1][j][2]+ls(0));
		}
	}
	cout<<max(dp[n][m][0],max(dp[n][m][1],dp[n][m][2]))<<'\n';
	return 0;
}
2024/10/3 20:21
加载中...