比赛 |
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;
}