#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |