Submission

Status:

[PPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: SnowAveNode

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

Language: cpp

Time: 0.061 second

Submitted On: 2026-04-19 11:55:48

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

const int nx = 1e5 + 5, MOD = 1e9 + 7, inf = 2e9; const ll INF = 4e18;

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr);

    int N, M; cin >> N >> M;
    vector<vector<int>> A(N + 1, vector<int>(M + 1));
    vector<vector<int>> dp(N + 1, vector<int>(M + 1));

    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= M; j++)
            cin >> A[i][j];

    for (int i = N; i >= 1; i--) {
        for (int j = M; j >= 1; j--) {
            if (i == N && j == M) {
                dp[i][j] = max(1, 1 - A[i][j]);
            } else if (i == N) {
                dp[i][j] = max(1, dp[i][j + 1] - A[i][j]);
            } else if (j == M) {
                dp[i][j] = max(1, dp[i + 1][j] - A[i][j]);
            } else {
                dp[i][j] = max(1, min(dp[i + 1][j], dp[i][j + 1]) - A[i][j]);
            }
        }
    }

    cout << dp[1][1] << '\n';

    return 0;
}