제출 #1318255

#제출 시각아이디문제언어결과실행 시간메모리
1318255lucageorgescuMaxcomp (info1cup18_maxcomp)C++20
100 / 100
285 ms8220 KiB
#include <bits/stdc++.h> using namespace std; const int nmax=1e3+5; const int inf=2e9+5; int n,m,a[nmax][nmax]; int dp[nmax][nmax],maxi; int main() { cin >> n >> m; for (int i=1; i<=n; i++ ) for (int j=1; j<=m; j++ ) cin >> a[i][j]; // i1>i2 si j1>j2 -> -i1, -j1 si dupa -(a[i2][j2]-i2-j2) for (int i=0; i<=n+1; i++ ) for (int j=0; j<=m+1; j++ ) dp[i][j]=inf; for (int i=1; i<=n; i++ ) { for (int j=1; j<=m; j++ ) { int val=a[i][j]-min(dp[i-1][j],dp[i][j-1])-i-j; maxi=max(maxi,val); dp[i][j]=min(min(dp[i-1][j], dp[i][j-1]), a[i][j]-i-j); } } // i1>i2 si j2>j1 -> -i1, +j1 si dupa -(a[i2][j2]-i2+j2) for (int i=0; i<=n+1; i++ ) for (int j=0; j<=m+1; j++ ) dp[i][j]=inf; for (int i=1; i<=n; i++ ) { for (int j=m; j>=1; j-- ) { int val=a[i][j]-min(dp[i-1][j],dp[i][j+1])-i+j; maxi=max(maxi,val); dp[i][j]=min(min(dp[i-1][j], dp[i][j+1]), a[i][j]-i+j); } } // i1<i2 si j1<j2 -> +i1, +j1 si dupa -(a[i2][j2]+i2+j2) for (int i=0; i<=n+1; i++ ) for (int j=0; j<=m+1; j++ ) dp[i][j]=inf; for (int i=n; i>=1; i-- ) { for (int j=m; j>=1; j-- ) { int val=a[i][j]-min(dp[i+1][j],dp[i][j+1])+i+j; maxi=max(maxi,val); dp[i][j]=min(min(dp[i+1][j], dp[i][j+1]), a[i][j]+i+j); } } // i1<i2 si j2<j1 -> +i1, -j1 si dupa -(a[i2][j2]+i2-j2) for (int i=0; i<=n+1; i++ ) for (int j=0; j<=m+1; j++ ) dp[i][j]=inf; for (int i=n; i>=1; i-- ) { for (int j=1; j<=m; j++ ) { int val=a[i][j]-min(dp[i+1][j],dp[i][j-1])+i-j; maxi=max(maxi,val); dp[i][j]=min(min(dp[i+1][j], dp[i][j-1]), a[i][j]+i-j); } } cout << maxi-1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...