为什么memset(dp,-0x3f,sizeof dp)只有90分
查看原帖
为什么memset(dp,-0x3f,sizeof dp)只有90分
882793
666wula666楼主2023/10/19 23:31
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int dp[N][N];
int s1[N], s2[N];
int n, m;
char ss1[N], ss2[N];

int d[6][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 main() {

	cin >> n;

	cin >> ss1 + 1;
	cin >> m;
	cin >> ss2 + 1;
	memset(dp, -0x3f, sizeof dp);//为什么这样处理会3和9WA

	for (int i = 1; i <= n; i++) {
		if (ss1[i] == 'A')s1[i] = 1;
		if (ss1[i] == 'C')s1[i] = 2;
		if (ss1[i] == 'G')s1[i] = 3;
		if (ss1[i] == 'T')s1[i] = 4;
	}
	for (int i = 1; i <= m; i++) {
		if (ss2[i] == 'A')s2[i] = 1;
		if (ss2[i] == 'C')s2[i] = 2;
		if (ss2[i] == 'G')s2[i] = 3;
		if (ss2[i] == 'T')s2[i] = 4;
	}
	for (int i = 1; i <= n; i++)dp[i][0] = dp[i - 1][0] + d[s1[i]][5];
	for (int i = 1; i <= m; i++)dp[0][i] = dp[0][i - 1] + d[5][s2[i]];

	dp[0][0] = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
// 			dp[i][j] = -0x3f3f3f3f;(正确处理方式)

			dp[i][j] = max(dp[i][j], dp[i][j - 1] + d[5][s2[j]]);
			dp[i][j] = max(dp[i][j], dp[i - 1][j] + d[s1[i]][5]);
			dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + d[s1[i]][s2[j]]);
		}

	}

	cout << dp[n][m];
}
2023/10/19 23:31
加载中...