70分求调 谢谢
查看原帖
70分求调 谢谢
1111313
ZCfree楼主2024/9/29 10:15
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+1;
int mp[N][N];
int n,m;
int h[N][N];
int all;
bool jud(int x,int y)
{
	return 
	(!h[x][y+1]||h[x][y+1]>=h[x][y])&&
	(!h[x][y-1]||h[x][y-1]>=h[x][y])&&
	(!h[x+1][y]||h[x+1][y]>=h[x][y])&&
	(!h[x-1][y]||h[x-1][y]>=h[x][y]);
}
void dfs(int x,int y,int a,int b,int ans)
{
	if(mp[x][y])
	{
		ans+=mp[x][y];
		mp[a][b]=max(mp[a][b],ans);
		return;
	}
	ans++;
	if(jud(x,y))
	{
		mp[a][b]=max(mp[a][b],ans);
		return;
	}
	if(h[x][y+1]&&h[x][y+1]<h[x][y])dfs(x,y+1,a,b,ans);
	if(h[x][y-1]&&h[x][y-1]<h[x][y])dfs(x,y-1,a,b,ans);
	if(h[x+1][y]&&h[x+1][y]<h[x][y])dfs(x+1,y,a,b,ans);
	if(h[x-1][y]&&h[x-1][y]<h[x][y])dfs(x-1,y,a,b,ans);
	return;
}

int main()
{
	memset(mp,0,sizeof(mp));
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>h[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			dfs(i,j,i,j,0);
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			//cout<<mp[i][j]<<" ";
			all=max(all,mp[i][j]);
		}
		//cout<<endl;
	}
	cout<<all;
}
2024/9/29 10:15
加载中...