求大佬调试
  • 板块学术版
  • 楼主imeye
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/11/2 15:50
  • 上次更新2023/10/27 04:31:31
查看原帖
求大佬调试
735507
imeye楼主2022/11/2 15:50

CSP-J 2020第四题 求大佬调试

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;
const ll maxn = 1e3;
const ll miin = -0x3f;
ll dx[4] = {0, 1, -1, 0};
ll dy[4] = {0, 0, 0, 1};
ll n, m, ans = -1e4;
ll a[maxn][maxn], dp[maxn][maxn][4];

void dfs(ll x, ll y, ll cur) {
    if (x == n && y == m) {
        if (cur > ans) ans = cur;
        return;
    }
    for (ll i = 1; i <= 3; i++) {
        ll nx = x + dx[i];
        ll ny = y + dy[i];
        if (nx < 1 || ny < 1 || nx > n || ny > m) break;
        if (dp[nx][ny][i] == -4485090715960753727) {
            dfs(nx, ny, cur + a[nx][ny]);
            dp[x][y][i] = max(max(dp[nx][ny][1], dp[nx][ny][2]), dp[nx][ny][3]);
        } else {
            ll p = max(max(dp[nx][ny][1], dp[nx][ny][2]), dp[nx][ny][3]);
            if (cur + p > ans) ans = cur + p;
        }
    }
}

int main() {
    cin >> n >> m;
    for (ll i = 1; i <= n; i++)
        for (ll j = 1; j <= m; j++)
            cin >> a[i][j];
    memset(dp, miin, sizeof(dp));
    for(ll i=1;i<=n;i++) dp[1][i][2]=0;
    for(ll i=1;i<=m;i++) dp[i][1][3]=0;
    dp[n][m][1] = dp[n][m][3] = a[n][m];
    dfs(1, 1, a[1][1]);
    cout << ans;
    return 0;
}

2022/11/2 15:50
加载中...