Submission
Status:
[PPPPPPPP-SSSSSS]
Score: 0
User: yumiKuri
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.075 second
Submitted On: 2025-04-01 10:36:18
#include <bits/stdc++.h>
using namespace std;
const int N = 1001;
int dp[N][N][2];
int table[N][N];
int main(){
ios_base::sync_with_stdio(0), cin.tie(0);
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> table[i][j];
}
}
for(int i = 1; i <= n; i++) dp[i][0][0] = dp[i][0][1] = -1e9;
for(int i = 1; i <= m; i++) dp[0][i][0] = dp[0][i][1] = -1e9;
dp[1][1][1] = dp[1][1][0] = table[1][1];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(i == 1 and j == 1) continue;
int up = dp[i-1][j][0] + table[i][j];
int neg_up = dp[i-1][j][1];
if(up < neg_up) neg_up = up;
int left = dp[i][j-1][0] + table[i][j];
int neg_left = dp[i][j-1][1];
if(left < neg_left) neg_left = left;
if(neg_left > neg_up){
dp[i][j][0] = left;
dp[i][j][1] = neg_left;
}
else if(neg_left == neg_up){
dp[i][j][0] = max(left, up);
dp[i][j][1] = neg_left;
}
else{
dp[i][j][0] = up;
dp[i][j][1] = neg_up;
}
}
}
/*for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cout << dp[i][j][0] << ' ';
}
cout << '\n';
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cout << dp[i][j][1] << ' ';
}
cout << '\n';
}*/
if(dp[n][m][1] >= 0) cout << 1;
else cout << dp[n][m][1]*-1 + 1;
}