80pts,点2WA,原因找到了却不知道怎么改
查看原帖
80pts,点2WA,原因找到了却不知道怎么改
565707
mediocre_楼主2024/10/7 10:25
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 6;
int n, a[N], dp[3][N][2];
int dfs(int x, int s, int pre) {
	if (s < 0) return INT_MIN;
	if (dp[s][x][pre] != INT_MIN) return dp[s][x][pre];
	if (x == n + 1) return (!s) ? 0 : INT_MIN;
	int ans = INT_MIN;
	if (!pre) ans = max(ans, dfs(x + 1, s - 1, 1));
	else ans = max(ans, dfs(x + 1, s, 1));
	ans = max(ans, dfs(x + 1, s, 0) + a[x]);
	return dp[s][x][pre] = ans;
}
int main() {
	// freopen("P1121_2.in", "r", stdin);
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i)
		scanf("%d", &a[i]), dp[0][i][0] = dp[0][i][1] = dp[1][i][0] = dp[1][i][1] = dp[2][i][0] = dp[2][i][1] = INT_MIN;
	printf("%d", dfs(1, 2, 0));
	return 0;
}

点二数据下载过了,正确输出是-200,我的输出是0,已经猜到问题可能出在第十行与第十一行的巧妙配合(就是什么都不选)

2024/10/7 10:25
加载中...