Submission
Status:
[PPPPPPPPPPPPPPP]
Score: 100
User: Jibhong
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.142 second
Submitted On: 2025-03-31 09:59:31
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
int mem[1005][1005];
vector<vector<int>>dp(1005,vector<int>(1005,-2e9));
int n,m;
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mem[i][j];
}
}
int l=1,r=2e9;
while(l<r){
bool ok=0;
int mid=(l+r)/2;
fill(dp.begin(),dp.end(),vector<int>(1005,-2e9));
dp[1][1]=mid+mem[1][1];
if(dp[1][1]<=0){
ok=0;
goto skip;
}
// dp[1][1]=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(i==1&&j==1)continue;
if(dp[i-1][j]+mem[i][j]>0){
dp[i][j]=max(dp[i][j],dp[i-1][j]+mem[i][j]);
}
if(dp[i][j-1]+mem[i][j]>0){
dp[i][j]=max(dp[i][j],dp[i][j-1]+mem[i][j]);
}
}
}
skip:
// cout<<mid<<'\n';
if(dp[n][m]>0)ok=1;
// cout<<l<<' '<<r<<' '<<dp[n][m]<<' '<<ok<<'\n';
/*
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cout<<dp[i][j]<<' ';
}
cout<<'\n';
}
*/
if(ok)r=mid;
else l=mid+1;
// if(l<0)return 69;
}
cout<<l;
return 0;
}