是真的一点都不会


私信TA

用户名:dotcpp0702741

访问量:3007

签 名:

等  级
排  名 3604
经  验 1810
参赛次数 0
文章发表 25
年  龄 0
在职情况 学生
学  校 福建农林大学
专  业 空间信息与数字技术

  自我简介:

import java.util.Scanner;

public class Main {
   static Scanner sc = new Scanner(System.in);
   static int[][] place;
   static int[][] dp;
   //java不支持静态数组的初始化
   static int dx[] = {0, 1, 0, -1};
   static int dy[] = {1, 0, -1, 0};
   static int r, c;
   static int maxl;

   public static int dfs(int x, int y) {
       //判断是否访问过
       if (dp[x][y] != 0) {
           return dp[x][y];
       }
       dp[x][y] = 1;
       int m = 0;//四个方向上的最长路径
       for (int i = 0; i < 4; i++) {
           int nx = x + dx[i];
           int ny = y + dy[i];
           //判断是否越界
           if (nx < 1 || ny < 1 || nx > r || ny > c) {
               continue;  //跳出本次循环
           }
           //检查新的位置是否大于当前位置(我们要找小的位置滑下去)
           if (place[nx][ny] >= place[x][y]) {
               continue;
           }
           m = Math.max(m, dfs(nx, ny));
       }
       dp[x][y] += m;
       maxl = Math.max(maxl, dp[x][y]);
       return dp[x][y];
   }

   public static void main(String[] args) {
       r = sc.nextInt();
       c = sc.nextInt();
       place = new int[r + 1][c + 1];
       dp = new int[r + 1][c + 1];
       for (int i = 1; i <= r; i++) {
           for (int j = 1; j <= c; j++) {
               place[i][j] = sc.nextInt();
           }
       }

       for (int i = 1; i <= r; i++) {
           for (int j = 1; j <= c; j++) {
               dfs(i, j);
           }
       }

       System.out.println(maxl);
   }
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区