Submission

Status:

[PPPP-SSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: mantaggez

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

Language: cpp

Time: 0.004 second

Submitted On: 2026-03-11 22:40:11

#include <bits/stdc++.h>

using namespace std;
using pii = pair<int, int>;

const int nx = 1e3+5;

struct HP {
    int mn, cur;
};

int n, m, a[nx][nx];
HP dp[nx][nx];

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin >> n >> m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            cin >> a[i][j];
        }
    }

    // dp[i][j] = {min, cur};

    for(int i=1;i<=n;i++) {
        if(dp[1][i - 1].cur + a[1][i] < 1) dp[1][i] = {dp[1][i - 1].mn + 1 - dp[1][i - 1].cur - a[1][i], 1};
        else dp[1][i] = {dp[1][i - 1].mn, dp[1][i - 1].cur + a[1][i]};

        if(dp[i - 1][1].cur + a[i][1] < 1) dp[i][1] = {dp[i - 1][1].mn + 1 - dp[i - 1][1].cur - a[i][1], 1};
        else dp[i][1] = {dp[i - 1][1].mn, dp[i - 1][1].cur + a[i][1]};
    }
    
    for(int i=2;i<=n;i++) {
        for(int j=2;j<=m;j++) {
            HP x, y;
            if(dp[i][j - 1].cur + a[i][j] < 1) x = {dp[i][j - 1].mn + 1 - dp[i][j - 1].cur - a[i][j], 1};
            else x = {dp[i][j - 1].mn, dp[i][j - 1].cur + a[i][j]};
            
            if(dp[i - 1][j].cur + a[i][j] < 1) y = {dp[i - 1][j].mn + 1 - dp[i - 1][j].cur - a[i][j], 1};
            else y = {dp[i - 1][j].mn, dp[i - 1][j].cur + a[i][j]};

            if(x.mn < y.mn) dp[i][j] = x;
            else if(x.mn == y.mn && x.cur > y.cur) dp[i][j] = x;
            else dp[i][j] = y;
        }
    }
    
    // cout << '\n';
    // for(int i=1;i<=n;i++) {
    //     for(int j=1;j<=m;j++) {
    //         cout << dp[i][j].mn << ' ' << dp[i][j].cur << '\t';
    //     }
    //     cout << '\n';
    // }
    
    cout << dp[n][m].mn;

    return 0;
}