Submission

Status:
[PPPPPPPPPPPPPPP]

Score: 100

User: Dormon

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

Language: cpp

Time: 0.070 second

Submitted On: 2025-03-13 22:32:02

#include <iostream>
#include <cstdint>
#include <cstring>
#include <vector>
#include <algorithm>
#include <functional>
#include <queue>
#include <numeric>
#include <array>
#include <iomanip> // cout << fixed << setprecision(n);

using namespace std;
const bool TEST_CASE = 0;

template<typename T>
typename std::enable_if<std::is_integral<T>::value>::type
Debug(const char* name, T value) {
    std::cout << name << " : " << value << '\n';
}

template<typename T, typename... Args>
typename std::enable_if<std::is_integral<T>::value>::type
Debug(const char* names, T value, Args... args){
    const char* comma = strchr(names, ',');
    std::cout.write(names, comma - names) << " : " << value << " | ";
    Debug(comma + 1, args...);
}
template<typename T> 
ostream& operator<<(ostream& out, vector<T> &a){
    for (auto &x : a) out << x << ' '; 
    return out;
};

#ifdef DORMON
    #define debug(...) Debug(#__VA_ARGS__, __VA_ARGS__)
#else
    #define debug(...) 
#endif

void solve(){
    int n, m;
    cin >> n >> m;
    vector<vector<int>> grid(n + 1, vector<int>(m + 1, 0)), dp(n + 1, vector<int>(m + 1, 0));

    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= m;j++){
            cin >> grid[i][j];
            grid[i][j] *= -1;
        }
    
    dp[n][m] = max(1, grid[n][m] + 1);
    for (int i = n - 1;i >= 1;i--)
        dp[i][m] = max(1, dp[i + 1][m] + grid[i][m]);
    for (int i = m - 1;i >= 1;i--)
        dp[n][i] = max(1, dp[n][i + 1] + grid[n][i]);

    for (int i = n - 1;i >= 1;i--)
        for (int j = m - 1;j >= 1;j--){
            dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) + grid[i][j];
            dp[i][j] = max(1, dp[i][j]);
        }

    // for (int i = 0;i <= n;i++)
    //     cout << dp[i] << '\n';

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


int main()
{
    #ifndef DORMON
        ios_base::sync_with_stdio(false); 
    #endif
    cin.tie(0);
    int q = 1; 
    if (TEST_CASE) cin >> q;
    while (q--){
        solve();
    }
}