90分#2超时求过
查看原帖
90分#2超时求过
735190
NARCISSUSyl楼主2022/8/11 21:47
#include<iostream>
using namespace std;
int hs,ls,c[101][101],num,low[101][101],up[101][101];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int la(int x,int y)
{
	if (low[x][y]==1)return 1;
	else low[x][y] = 1;
	for (int i=0;i<4;i++)
	{
		int xx = x+dx[i];
		int yy = y+dy[i];
		if (xx<=hs&&xx>0&&yy<=ls&&yy>0)
		{
			if (c[xx][yy]<c[x][y])
			{
				low[xx][yy] = la(xx,yy);
				low[x][y] = max(low[x][y],low[xx][yy]+1);
			}
		}
	}
	return low[x][y];
}
int per(int x,int y)
{
	if (up[x][y]==1)return 1;
	else up[x][y] = 1;
	for (int i=0;i<4;i++)
	{
		int xx = x+dx[i];
		int yy = y+dy[i];
		if (xx<=hs&&xx>0&&yy<=ls&&yy>0)
		{
			if (c[xx][yy]>c[x][y])
			{
				up[xx][yy] = per(xx,yy);
				up[x][y] = max(up[x][y],up[xx][yy]+1);
			}
		}
	}
	return up[x][y];
}
int main()
{
	cin>>hs>>ls;
	for(int i = 1;i <= hs;i++)
	{
		for (int j = 1; j <= ls;j++)
		{
			cin>>c[i][j];
		}
	}
	for(int i = 1;i <= hs;i++)
	{
		for (int j = 1; j <= ls;j++)
		{
			num = max(la(i,j)+per(i,j)-1,num);
		}
	}
	cout<<num;
	return 0;
}
2022/8/11 21:47
加载中...