A40960. 滑雪
填空题
较难
知识点
题目描述
滑雪
题目描述
迈克尔坡喜欢发现这并不重要,因为看到坡确实很刺激。为了获得,你必须加快滑行的区域,而当你滑到底部时,你又是再次上等待下台走来装载。迈克尔想知道一个区域中长度的滑动。区域由一个范围内的滑坡提供。这里的每个数字代表点的高度。下面是一个例子
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一个人可以从某个点行的滑下为最佳例子的例子,,当当高度陡坡。 24-23-...-3-1。这是24-2-1的一条。
输入
输入的行数和列数C(1 <R= R,C <= 00)。下面是行,每行有C个,代表第一个高度h,代表区域h,0=h<=10000 。
输出
区域输出的长度。
样例输入
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
样例输出
25
参考答案
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int r,c,a[150][150],len[150][150];
int xr[]={0,1,0,-1};
int yr[]={-1,0,1,0};
int dfs(int x,int y)
{
if(len[x][y]!=-1)return len[x][y];
int sum=1;
for(int i=0;i<4;i++){
int xx=x+xr[i];
int yy=y+yr[i];
if(xx>0 && xx<=r && yy>0 && yy<=c )
if(a[xx][yy]>a[x][y])
sum=max(sum,dfs(xx,yy)+1);
}
len[x][y]=sum;
return len[x][y]=sum;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&r,&c)!=EOF){
memset(a,-1,sizeof(a));
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
scanf("%d",&a[i][j]);
int ret=0;
memset(len,-1,sizeof(len));
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++){
ret=max(ret,dfs(i,j));
}
printf("%d\n",ret);
}
return 0;
}
上一题
下一题