题目描述:
trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
大致思路:
利用宽度优先搜索和记忆化搜索,就可以解决问题。深搜似乎也行。代码是在linux下写的,换行符不兼容。
代码:
trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
大致思路:
利用宽度优先搜索和记忆化搜索,就可以解决问题。深搜似乎也行。代码是在linux下写的,换行符不兼容。
代码:
#include<cstdio>
#include<cstring>
using namespace std;
int map[110][110],ans[110][110];
int r,c;
bool f[110][110];
int max(int a,int b)
{
return a>b?a:b;
}
int cal(int a,int b)
{
int tmp=0,ab=map[a][b];
if (f[a][b]) return ans[a][b];
f[a][b]=true;
if (a<r&&map[a+1][b]<ab) tmp=max(tmp,cal(a+1,b)+1);
if (a>1&&map[a-1][b]<ab) tmp=max(tmp,cal(a-1,b)+1);
if (b<c&&map[a][b+1]<ab) tmp=max(tmp,cal(a,b+1)+1);
if (b>1&&map[a][b-1]<ab) tmp=max(tmp,cal(a,b-1)+1);
ans[a][b]=tmp;
return ans[a][b];
}
int main()
{
int aa=0;
scanf("%d%d",&r,&c);
for (int i=1;i<=r;i++)
for (int j=1;j<=c;j++)
scanf("%d",&map[i][j]);
memset(ans,0,sizeof(ans));
for (int i=1;i<=r;i++)
for (int j=1;j<=c;j++)
aa=max(aa,cal(i,j));
printf("%d",aa+1);
}