比赛 20120712 评测结果 AAAAAAAAAA
题目名称 登山 最终得分 100
用户昵称 Czb。 运行时间 0.054 s
代码语言 C++ 内存使用 0.34 MiB
提交时间 2012-07-12 10:18:14
显示代码纯文本
#include<stdio.h>

const int px[4]={-1,0,1,0};

const int py[4]={0,1,0,-1};

int n,m,tmp,ans,a[100][100];

bool flag[100][100];

void dfs(int x,int y,bool bo)
{
	if(tmp>ans)
		ans=tmp;
	int xx,yy;
	if(bo)
	{
		for(int i=0;i<4;i++)
		{
			xx=x+px[i];
			yy=y+py[i];
			if(xx<1||xx>n||yy<1||yy>m)
				continue;
			if(a[xx][yy]>a[x][y]&&!flag[xx][yy])
			{
				tmp++;
				flag[xx][yy]=true;
				dfs(xx,yy,1);
				flag[xx][yy]=false;
				tmp--;
			}
		}
	}
	for(int i=0;i<4;i++)
	{
		xx=x+px[i];
		yy=y+py[i];
		if(xx<1||xx>n||yy<1||yy>m)
			continue;
		if(a[xx][yy]<a[x][y]&&!flag[xx][yy])
		{
			tmp++;
			flag[xx][yy]=true;
			dfs(xx,yy,0);
			flag[xx][yy]=false;
			tmp--;
		}
	}
}

int main()
{
	freopen("hike.in","r",stdin);
	freopen("hike.out","w",stdout);
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			flag[i][j]=true;
			dfs(i,j,1);
			flag[i][j]=false;
		}
	}
	printf("%d\n",ans+1);
	return 0;
}