1 条题解

  • 0
    @ 2025-10-8 16:54:29
    #include<bits/stdc++.h>
    using namespace std;
    const int N=110;
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
     
    int a[N][N],f[N][N],n,m;
     
    int dfs(int x,int y) //dfs(x,y)表示从点x,y出发最多可以滑过多少个点(包括出发点)
    {
        if(f[x][y]!=0) return f[x][y];
        int t=0;
        for(int i=0;i<=3;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]) t=max(t,dfs(xx,yy));
        }
        return f[x][y]=t+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]);
        int ans=0;
        for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) ans=max(ans,dfs(i,j));
        printf("%d",ans);
        return 0; 
    }
    
    • 1

    信息

    ID
    864
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    226
    已通过
    62
    上传者