20分求助qwq
查看原帖
20分求助qwq
1500557
AAA0721ciallo楼主2024/12/9 22:55
#include<iostream>
using namespace std;
int gene1[105];
int gene2[105];//
int dp[105][105];
int n,m;
int lt[5][5] = { {5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,5000} };
int f(int i,int j) {//表示这在考虑这两个字符
	if (i == n && j == m) { return 0; }
	if (i == n) { int result = 0; for (int k = j; k < m; k++) { result += lt[4][gene2[k]]; dp[i][j] = result; return result; } }
	if (j == m) { int result = 0; for (int k = i; k < n; k++) { result += lt[gene1[k]][4]; dp[i][j] = result; return result; } }
	if (dp[i][j] != -5000) { return dp[i][j]; }
	int ans = -10000000;
	int temp1 = 0;
	int temp2 = 0;
	int a, b;	
		temp1 = f(i, j + 1) + lt[4][gene2[j]];//补孔缺
		temp2 = f(i + 1, j) + lt[gene1[i]][4];
		ans = f(i + 1, j + 1) + lt[gene1[i]][gene2[j]];
		ans = max(ans, max(temp1, temp2));
	dp[i][j] = ans;
	return ans;
}
int main() {
	
	int ans;
	cin >> n;
	char ch; int a;
	for (int i = 1; i <= n; i++) {
		cin >> ch;
		if (ch == 'A') { a = 0; }
		else if (ch == 'C') { a = 1; }
		else if (ch == 'G') { a = 2; }
		else if (ch == 'T') { a = 3; }
		gene1[i] = a;
	}
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> ch;
		if (ch == 'A') { a = 0; }
		else if (ch == 'C') { a = 1; }
		else if (ch == 'G') { a = 2; }
		else if (ch == 'T') { a = 3; }	
		gene2[i] = a;
	}
	for (int i = 0; i <= 103; i++) {
		for (int j = 0; j <= 103; j++) {
			dp[i][j] = -5000;
		}
	}
	//字符串对应的状态转移方程?递归
	ans=f(0,0);
	std::cout << ans << endl;
}

我的思路和大佬一模一样aa为什么不对qwq

2024/12/9 22:55
加载中...