[C++]请问为什么会RE
查看原帖
[C++]请问为什么会RE
206424
氧化后的钙CaO楼主2021/9/18 17:03

以下为 C++ 代码

#include <cstdio>
const int MN = 30;
int edge[MN][MN], next[MN], dp[MN];
int main() {
	int n, status, maxi = 0, maxj, maxn, begin;
	scanf("%d", &n);
	for (register int i = 1; i <= n; ++ i) {
		scanf("%d", dp + i);
	}
	for (register int i = 1; i <= n; ++ i) {
		for (register int j = i + 1; j <= n; ++ j) {
			scanf("%d", &status);
			if (status)
				edge[i][++ edge[i][0]] = j;
		}
	}
	for (register int i = n; i > 0; -- i) {
		maxn = 0;
		for (register int j = edge[i][0]; j > 0; -- j) {
			if (maxn < dp[edge[i][j]] + dp[i]) {
				maxn = dp[edge[i][j]] + dp[i];
				maxj = j;
				next[i] = edge[i][j];
			}
		}
		if (dp[i] < maxn)
			dp[i] = maxn;
		if (dp[begin] < dp[i])
			begin = i;
	}
	for (register int i = begin; i > 0; i = next[i])
		printf("%d ", i);
	printf("\n%d", dp[begin]);
	return 0;
}

我用深度优先搜索 AC 了一遍,想要用动态规划再做一次(即如上代码)。我在自己的机器上可以过,但是提交测评却 RE 了,请问我哪里做错了?如果方便,请指出我的错误,感激不尽!


变量说明:

我使用了 edge[i][j] 存图,其中 edge[i][0] 表示与 i 连通的地窖的数目,而对于 j>0 时, edge[i][j] 储存的是与 i 相连的第 j 个地窖的编号。

next[i] 数组表示从 i 开始挖地雷时,若想让总数最大,则需要前往第 next[i] 号地窖。

2021/9/18 17:03
加载中...