记录编号 |
230298 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 10285] 最长滑坡 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.175 s |
提交时间 |
2016-02-21 11:53:41 |
内存使用 |
2.24 MiB |
显示代码纯文本
#include<cstdio>
#define max(a,b) a>b?a:b
int read(){
int x;char ch;
while(ch=getchar(),ch>'9'||ch<'0');
x=ch-48;
while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;
return x;
}
int h[505][505];
int d[505][505];
int dire[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y){
if(d[x][y])return;
d[x][y]=1;
int _x,_y;
for(int i=0;i<4;++i){
_x=x+dire[i][0];
_y=y+dire[i][1];
if(h[x][y]>h[_x][_y]){
dfs(_x,_y);
d[x][y]=max(d[x][y],d[_x][_y]+1);
}
}
}
int main(){
freopen("shunzhi.in","r",stdin);
freopen("shunzhi.out","w",stdout);
int r,c;
r=read();c=read();
for(int i=1;i<=r;++i){
for(int j=1;j<=c;++j){
h[i][j]=read();
}
}
for(int i=1;i<=r;++i)h[i][0]=h[i][c+1]=50000;
for(int i=1;i<=c;++i)h[0][i]=h[r+1][i]=50000;
for(int i=1;i<=r;++i){
for(int j=1;j<=c;++j){
if(!d[i][j])dfs(i,j);
}
}
int maxd=0;
for(int i=1;i<=r;++i)
for(int j=1;j<=c;++j)
maxd=max(maxd,d[i][j]);
printf("%d",maxd);
fclose(stdin);fclose(stdout);
return 0;
}