Acwing 901.滑雪

给定一个R行C列的矩阵,表示一个矩形网格滑雪场。

矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。

一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。

当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。

#include<bits/stdc++.h>
#define N 1000
using namespace std;
int a[N][N];
int f[N][N];
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
int n,m,maxx;
void dfs(int x,int y)
{
    if(f[x][y])return;
    for(int i=1;i<=4;i++)
    {
        int xx=x+dx[i];
        int yy=y+dy[i];
        if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[x][y]>a[xx][yy])
        {
            dfs(xx,yy);
            f[x][y]=max(f[x][y],f[xx][yy]+1);
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            dfs(i,j);
            maxx=max(maxx,f[i][j]);
        }
    printf("%d",maxx+1);
    return 0;
}

 

posted @ 2020-12-22 20:31  君与  阅读(74)  评论(0编辑  收藏  举报