Submission

Status:

[PPPP-SSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: hmmm

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

Language: cpp

Time: 0.003 second

Submitted On: 2026-02-08 20:56:46

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<long long>> vec(n+2,vector<long long> (m+2));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>vec[i][j];
        }
    }    
    long long l = 0 , r = 1e12;
    while(l<r){
        vector<vector<long long>> dp(n+2,vector<long long> (m+2 ,-1e18));
        long long mid = l + (r-l)/2;
        //cout<<mid<<"\n";
        dp[1][1] = vec[1][1]+mid;
		if(dp[1][1] <= 0 ){
            l = mid + 1;
            continue;
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
            	if(i==1 && j==1) continue;
                dp[i][j] = max(dp[i][j-1],dp[i-1][j])+vec[i][j];
                if(dp[i][j] <=0){
                    dp[i][j] = -1e18;
                }
            }
        }
        if(dp[n][m] >0 ){
            r = mid;
        }
        else{
            l = mid+1;
        }
        // for(int i = 1;i<=n;i++){
        //     for(int j=1;j<=m;j++){
        //         cout<<dp[i][j]<<" ";
        //     }
        //     cout<<"\n";
        // }
        // cout<<"\n";
    } 
    cout<<l;
}