java_day8

目标:Java web开发

问题:滑雪

import java.util.*;
class Main{
    static Scanner sc=new Scanner(System.in);
    static final int N=310;
    static int h[][]=new int[N][N],f[][]=new int[N][N];
    static int n,m;
    static int dx[]={-1,1,0,0},dy[]={0,0,-1,1};//设置静态变量,各个函数共用,减少了代码量
    static int dfs(int x,int y){
        if (f[x][y]!=-1) return f[x][y];//以前搜到过就不再搜了,大大降低了搜索时间
        f[x][y]=1;
        for(int i=0;i<4;i++){
            int a=x+dx[i],b=y+dy[i];
            if(a>=0&&a<n&&b>=0&&b<m&&h[a][b]<h[x][y]) 
                f[x][y]=Math.max(f[x][y],dfs(a,b)+1);
        }
        return f[x][y];
    }
    public static void main(String args[]){
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++) f[i][j]=-1;
        n=sc.nextInt();
        m=sc.nextInt();
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                h[i][j]=sc.nextInt();
        int res=-1;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                res=Math.max(res,dfs(i,j));
        System.out.println(res);
    }
}

没错,水了。。。

posted @ 2021-07-12 22:00  zhuangzhongxu  阅读(32)  评论(0编辑  收藏  举报