Submission
Status:
[PPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: hyyh
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.313 second
Submitted On: 2026-01-13 00:01:50
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define endl '\n'
#define f first
#define s second
int const diaphantineequationformutidimentionalcalculation = 1010;
int tb[diaphantineequationformutidimentionalcalculation][diaphantineequationformutidimentionalcalculation];
int n,m;
bool check(int k){
//cout << k << endl;
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
dp[1][1] = k+tb[0][0];
if(dp[1][1] <= 0) return false;
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]);
if(dp[i][j] > 0){
dp[i][j] += tb[i-1][j-1];
}
//cout << dp[i][j] << " ";
}
//cout << endl;
}
return dp[n][m] > 0;
}
int main(){
cin >> n >> m;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
cin >> tb[i][j];
}
}
//cout << tb[0][0];
int l = 1,r = 1e9+10;
while(l <= r){
int md = l+(r-l)/2;
if(check(md)){
r = md-1;
}
else{
l = md+1;
}
}
cout << l+(r-l)/2 << endl;
}