社区讨论

90pts,把所有的问题都找过了

P7074[CSP-J 2020] 方格取数参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@m1usgtjf
此快照首次捕获于
2024/10/04 21:56
去年
此快照最后确认于
2025/11/04 18:03
4 个月前
查看原帖
rt,正在备战CSP-J第二轮的我正在拼命训练
CPP
#include <bits/stdc++.h>
#define INF 100000000000000000
using namespace std;
const int N = 1005;
int n, m;
long long a[N][N], dp[N][N][3];
int dfs(int x, int y, int z) {
	if (x > n || y > m || x < 1) return -INF;
	if (dp[x][y][z] != -INF) return dp[x][y][z];
	if (x == n && y == m) return dp[x][y][z] = a[n][m];
	if (z == 1) return dp[x][y][z] = max(dfs(x + 1, y, 1), dfs(x, y + 1, 0)) + a[x][y];
	if (z == 2) return dp[x][y][z] = max(dfs(x - 1, y, 2), dfs(x, y + 1, 0)) + a[x][y];
	return dp[x][y][z] = max({dfs(x + 1, y, 1), dfs(x - 1, y, 2), dfs(x, y + 1, 0)}) + a[x][y];
}
int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			scanf("%lld", &a[i][j]), dp[i][j][0] = dp[i][j][1] = dp[i][j][2] = -INF;
	printf("%lld\n", dfs(1, 1, 0));
	/*
	for (int k = 0; k < 3; ++k, puts(""))
		for (int i = 1; i <= n; ++i, puts(""))
			for (int j = 1; j <= m; ++j)
				printf("%d ", dp[i][j][k]);
	*/
	return 0;
}
有两个点WA了

回复

7 条回复,欢迎继续交流。

正在加载回复...