Submission

Status:

[PPPP-SSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: KantaponZ

Problemset: อัศวินขี่ม้าขาว

Language: cpp

Time: 0.004 second

Submitted On: 2025-09-03 23:17:47

#include <bits/stdc++.h>
using namespace std;

#define ll long long
int N, M;
ll dp[1005][1005];

int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    for (int i = 0; i < 1005; i++) {
        for (int j = 0; j < 1005; j++) {
            dp[i][j] = -1e18;
        }
    }
    cin >> N >> M;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            cin >> dp[i][j];
            if (dp[i - 1][j] == -1e18 && dp[i][j - 1] == -1e18) continue;
            dp[i][j] += max(dp[i - 1][j], dp[i][j - 1]);
        }
    }

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            ll k = max(1 - dp[i][j], 0 * 1LL);
            if (i == 1 && j == 1) {
                dp[i][j] = k;
                continue;
            }
            if (dp[i - 1][j] == -1e18) dp[i - 1][j] *= -1;
            if (dp[i][j - 1] == -1e18) dp[i][j - 1] *= -1;
            if (k < dp[i - 1][j] && k < dp[i][j - 1]) {
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]);
            } else {
                dp[i][j] = k;
            }
        }
    }
/*
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }*/

    cout << dp[N][M];
}

/*

2 3
-3 -6 -3
2 2 -3

4 3
-3 -6 -3
2 2 -3
-8 -8 -8
1 1 1
*/