帮忙看一下这段代码为什么会报错
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
namespace problem {
const ll EOF = std::LLONG_MIN;
int n, m;
ll w[1000][1000], f[1000][1000][2];
ll max(ll p, ll q, ll r) {
return p > q ? (p > r ? p : r) : (q > r ? q : r);
}
ll dfs(int x, int y, int p) {
if (x < 0 || x >= n || y < 0 || y >= m) return EOF;
if (f[x][y][p] != EOF) return f[x][y][p];
if (p == 0) f[x][y][p] = max(dfs(x + 1, y, 0), dfs(x, y - 1, 0), dfs(x, y - 1, 1)) + w[x][y];
else f[x][y][p] = max(dfs(x - 1, y, 1), dfs(x, y - 1, 0), dfs(x, y - 1, 1)) + w[x][y];
return f[x][y][p];
}
void main() {
std::scanf("%d %d", &n, &m);
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
std::scanf("%lld", &w[i][j]);
f[i][j][0] = f[i][j][1] = EOF;
}
f[1][1][0] = f[1][1][1] = w[1][1];
ll ans = dfs(n, m, 1);
std::printf("%lld\n", ans);
}
}
int main() {
problem::main();
return 0;
}