Submission

Status:
[PPPP-SSSSSSSSSS]

Score: 0

User: Jibhong

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

Language: cpp

Time: 0.008 second

Submitted On: 2025-03-31 09:44:04

#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(){
    cin>>n>>m;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            cin>>mem[i][j];
        }
    }
    int l=0,r=2e9;
    while(l<r){
        bool ok=0;
        int mid=(l+r)/2;
        fill(dp.begin(),dp.end(),vector<int>(1005,-2e9));
        dp[0][1]=mid;
        dp[1][0]=mid;
//         dp[1][1]=0;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                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]);
                }
            }
        }
//         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;
}