比赛 20120712 评测结果 AAAAAAAAAA
题目名称 登山 最终得分 100
用户昵称 沉迷学习的假的Keller 运行时间 0.042 s
代码语言 C++ 内存使用 0.35 MiB
提交时间 2016-02-17 10:32:02
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[65][65],f[65][65];
int vis[2][4]={1,-1,0,0,0,0,1,-1};
bool dis[65][65];
int n,m;
int dfs(int x,int y,int d,int fx){
	dis[x][y]=1;
	int ans=d;
	if(fx==1){
		for(int i=0;i<4;i++){
			int x2=x+vis[0][i],y2=y+vis[1][i];
			if(a[x2][y2]>a[x][y]&&!dis[x2][y2]&&!(x2<1||y2<1||x2>n||y2>m)){
				ans=max(ans,dfs(x2,y2,d+1,1));
			}
		}
		for(int i=0;i<4;i++){
			int x4=x+vis[0][i],y4=y+vis[1][i];
			if(a[x4][y4]<a[x][y]&&!dis[x4][y4]&&!(x4<1||y4<1||x4>n||y4>m)){
				ans=max(ans,dfs(x4,y4,d+1,0));
			}
		}
	}
	if(fx==0){
		for(int i=0;i<4;i++){
			int x3=x+vis[0][i],y3=y+vis[1][i];
			if(a[x3][y3]<a[x][y]&&!dis[x3][y3]&&!(x3<1||y3<1||x3>n||y3>m)){
				ans=max(ans,dfs(x3,y3,d+1,0));
			}
		}
	}
	dis[x][y]=0;
	return ans;
}
int main(){
	freopen("hike.in","r",stdin);
	freopen("hike.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	int ans2=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int z=dfs(i,j,1,1);
			ans2=max(ans2,z);
		}
	}
	printf("%d",ans2);
	return 0;
}