Submission
Status:
[PPPPPPPPPPPPPPP]
Score: 100
User: qwerty
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.086 second
Submitted On: 2025-03-17 20:35:15
#include<bits/stdc++.h>
using namespace std;
int main(){
cin.tie(0)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<vector<int>> path(n+1, vector<int>(m+1, 0));
// start at (1, 1)
for (int i = 1 ; i <= n ; i++){
for (int j = 1 ; j <= m ; j++){
cin >> path[i][j];
}
}
vector<vector<int>> dp(n+2, vector<int>(m+2, INT_MAX));
dp[n + 1][m] = dp[n][m + 1] = 1;
for (int i = n ; i > 0 ; i--) {
for (int j = m ; j > 0 ; j--) {
if (i==n && j == m) {
dp[n][m] = max(1, 1-path[n][m]);
continue;
}
int minn = min(dp[i+1][j], dp[i][j+1]);
dp[i][j] = max(1, minn-path[i][j]);
}
}
cout << dp[1][1];
}
// 2 3 -3 -6 -3 2 2 -3