Submission
Status:
[PPPPPPPPPPPPPPP]
Score: 100
User: Nakornrat
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.200 second
Submitted On: 2025-03-22 23:55:47
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
int n, m;
const int inf = -1e9;
vector<vector<int>> gh;
bool valid(int hp){
vector<vector<int>> dp(n, vector<int>(m, inf));
dp[0][0] = gh[0][0]+hp;
if(dp[0][0]<=0)return false;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i==0&&j==0)continue;
int mx = inf;
if(i>0&&dp[i-1][j]>0)mx = max(mx, gh[i][j]+dp[i-1][j]);
if(j>0&&dp[i][j-1]>0)mx = max(mx, gh[i][j]+dp[i][j-1]);
dp[i][j] = mx;
}
}
return dp[n-1][m-1]>0;
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>m;
gh.assign(n, vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)cin>>gh[i][j];
}
int l = 1, r = INT_MAX;
while(l<r){
int mid = l+(r-l)/2;
if(valid(mid)){
r = mid;
}else{
l = mid + 1;
}
}
cout<<l<<endl;
}