比赛 |
20120712 |
评测结果 |
AAAAAAAAAA |
题目名称 |
登山 |
最终得分 |
100 |
用户昵称 |
Makazeu |
运行时间 |
0.055 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2012-07-12 11:17:48 |
显示代码纯文本
#include <cstdlib>
#include <cstdio>
using namespace std;
const int MAXN=66;
int N,M,map[MAXN][MAXN];
int res,ans,flag[MAXN][MAXN];
const int step[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
inline int Max(int a,int b) {return a>b?a:b;}
void dfs(int x,int y,bool flagg)
{
int tx,ty; ans=Max(ans,res);
if(flagg)
{
for(int i=0;i<4;i++)
{
tx=x+step[i][0],ty=y+step[i][1];
if(tx<1 || tx>N || ty<1 || ty>N) continue;
if(map[tx][ty]>map[x][y] && !flag[tx][ty])
{
flag[tx][ty]=1; res++;
dfs(tx,ty,1); flag[tx][ty]=0; res--;
}
}
}
for(int i=0;i<4;i++)
{
tx=x+step[i][0],ty=y+step[i][1];
if(tx<1 || tx>N || ty<1 || ty>N) continue;
if(map[tx][ty]<map[x][y] && !flag[tx][ty])
{
flag[tx][ty]=1; res++; dfs(tx,ty,0);
flag[tx][ty]=0; res--;
}
}
}
int main()
{
freopen("hike.in","r",stdin);
freopen("hike.out","w",stdout);
scanf("%d %d\n",&N,&M);
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
scanf("%d\n",&map[i][j]);
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
flag[i][j]=1; res=1;
dfs(i,j,1); flag[i][j]=0;
}
}
printf("%d\n",ans);
return 0;
}