Submission

Status:
[PPPPPPPPPPPPPPP]

Score: 100

User: Pera

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

Language: cpp

Time: 0.089 second

Submitted On: 2025-03-24 14:09:30

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

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    int n, m; cin >> n >> m;
    vector<vector<int>> pot(n, vector<int>(m, -1));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> pot[i][j];
        }
    }

    vector<vector<int>> hpmemo(n, vector<int>(m, -1));
    hpmemo[n - 1][m - 1] = max(1, 1 - pot[n - 1][m - 1]);

    for (int i = n - 1; i >= 0; i--) {
        for (int j = m - 1; j >= 0; j--) {
            // edge cases
            if (i == n -1 && j == m - 1) continue;
            else if (i == n - 1 && j < m - 1) {
                hpmemo[i][j] = max(1, hpmemo[i][j+1] - pot[i][j]);
                continue;
            } else if (j == m - 1 && i < n - 1) {
                hpmemo[i][j] = max(1, hpmemo[i + 1][j] - pot[i][j]);
                continue;
            }
            hpmemo[i][j] = max(1, min(hpmemo[i][j+1], hpmemo[i+1][j]) - pot[i][j]);
        }
    }

    cout << hpmemo[0][0] << '\n';

}