Submission

Status:

[PPPP-SSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: singtoppy

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-01-23 23:40:46

#include<bits/stdc++.h>

using namespace std;

#define pii pair<int, int>

const int N = 24;
const int INF = 1e9;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m;
	cin >> n >> m;

	vector<vector<int>> v(n, vector<int>(m));
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < m; j++) {
			cin >> v[i][j];
		}
	}

	//min spike and current count

	vector<vector<pii>> dp(n, vector<pii>(m, {INT_MIN, INT_MIN}));
	dp[0][0].first = v[0][0];
	dp[0][0].second = v[0][0];

	for(int i = 0; i < n; i++) {
		for(int j = 0; j < m; j++) {
			if(i + 1 < n) 
				dp[i + 1][j].first = max(dp[i + 1][j].first, dp[i][j].first + v[i + 1][j]);
			if(j + 1 < m) 
				dp[i][j + 1].first = max(dp[i][j + 1].first, dp[i][j].first + v[i][j + 1]);
			if(i - 1 >= 0)
				dp[i][j].second = max(dp[i][j].second, min(dp[i - 1][j].second, dp[i][j].first));
			if(j - 1 >= 0)
				dp[i][j].second = max(dp[i][j].second, min(dp[i][j - 1].second, dp[i][j].first));  
		}
	}

	// for(int i = 0; i < n; i++) {
	// 	for(int j = 0; j < m; j++) {
	// 		cout << dp[i][j].first << ' ';
	// 	}
	// 	cout << '\n';
	// }

	// cout << '\n';

	// for(int i = 0; i < n; i++) {
	// 	for(int j = 0; j < m; j++) {
	// 		cout << dp[i][j].second << ' ';
	// 	}
	// 	cout << '\n';
	// }

	cout << abs(dp[n - 1][m - 1].second) + 1 << '\n';
}