Submission #1319134

#TimeUsernameProblemLanguageResultExecution timeMemory
1319134MuhammadSaramMaxcomp (info1cup18_maxcomp)C++20
100 / 100
295 ms20072 KiB
#include <bits/stdc++.h>

using namespace std;

const int M = 1e3 + 6;

int pre[M][M][4], a[M][M];

int main()
{
	int n,m;
	cin>>n>>m;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			cin>>a[i][j];
	for (int i=0;i<=n+1;i++)
		for (int j=0;j<=m+1;j++)
			for (int k=0;k<4;k++)
				pre[i][j][k]=-15e8;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
		{
			pre[i][j][0]=max(pre[i-1][j][0],pre[i][j-1][0]);
			pre[i][j][0]=max(pre[i][j][0],-a[i][j]+i+j);
		}
	for (int i=1;i<=n;i++)
		for (int j=m;j>=1;j--)
		{
			pre[i][j][1]=max(pre[i-1][j][1],pre[i][j+1][1]);
			pre[i][j][1]=max(pre[i][j][1],-a[i][j]+i-j);
		}
	for (int i=n;i>=1;i--)
		for (int j=1;j<=m;j++)
		{
			pre[i][j][2]=max(pre[i+1][j][2],pre[i][j-1][2]);
			pre[i][j][2]=max(pre[i][j][2],-a[i][j]-i+j);
		}
	for (int i=n;i>=1;i--)
		for (int j=m;j>=1;j--)
		{
			pre[i][j][3]=max(pre[i+1][j][3],pre[i][j+1][3]);
			pre[i][j][3]=max(pre[i][j][3],-a[i][j]-i-j);
		}
	int ans=-1;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			ans=max(ans,a[i][j]+max(pre[i][j][0]-i-j,pre[i][j][1]-i+j)-1),ans=max(ans,a[i][j]+max(pre[i][j][2]+i-j,pre[i][j][3]+i+j)-1);
	cout<<ans<<endl;

	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...