样例都过不了了 【求助
查看原帖
样例都过不了了 【求助
601527
zhuzl009楼主2024/6/10 23:08

本来是想优化一下,结果样例都过不了了。。。 【求助

#include <iostream>

using namespace std;

const int N = 20;
int mp[N][N], dp[N][N][N];
//dp[s][i][k] 第s步 分别为第i行和第k行

int main() {
	int n;
	scanf ("%d", &n);

	int a, b, c;
	while (1) {
		scanf ("%d%d%d", &a, &b, &c);
		if (!a)
			break;
		mp[a][b] = c;
	}

	for (int s = 0; s <= 2 * (n - 1); s ++)
		for (int i = 1; i <= min(n, s + 1); i ++)
			for (int k = 1; k <= min(n, s + 1); k ++) {
				int j = s + 2 - i;
				int l = s + 2 - k;
				if (!(j >= 1 && j <= n && l >= 1 && l <= n))
					continue;

				dp[s][i][k] = max(max(dp[s - 1][i][k], dp[s - 1][i][k - 1]),
				                  max(dp[s - 1][i - 1][k], dp[s - 1][j - 1][k - 1])) + mp[i][j] + mp[k][l];
				if (i == k)
					dp[s][i][k] -= mp[i][j];
			}

//	for (int i = 1; i <= n; i ++) {
//		for (int j = 1; j <= n; j ++)
//			printf ("%-3d", mp[i][j]);
//		printf ("\n");
//	}
//	for (int i = 1; i <= n; i ++) {
//		for (int j = 1; j <= n; j ++)
//			printf ("%-3d", dp[i + j - 2][i][i]);
//		printf ("\n");
//	}

	printf ("%d", dp[2 * (n - 1)][n][n]);
	return 0;
}

请大佬帮看看

2024/6/10 23:08
加载中...