博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
skiing
阅读量:5288 次
发布时间:2019-06-14

本文共 3167 字,大约阅读时间需要 10 分钟。

1 package noj_skiing; 2  3 import java.util.*; 4 import java.math.*; 5  6 public class Main { 7  8     public static void main(String[] args) { 9         Solution s = new Solution();10         Scanner sc = new Scanner(System.in);11         int N = sc.nextInt();12         int[] result = new int[N];13         for(int i = 0; i < N; i++) {14             int rowNum = sc.nextInt(); 15             int colNum = sc.nextInt();16             int[][] info = new int[rowNum][colNum];17             for(int r = 0; r < rowNum; r++) {18                 for(int c = 0; c < colNum; c++) {19                     info[r][c] = sc.nextInt();20                 }    21             }22             result[i] = s.getResult(info, rowNum, colNum);23         }24         sc.close();25         for(int i : result) {26             System.out.println(i);27         }28     }29 30 }31 class Solution {32     public int getResult(int[][] info, int rowNum, int colNum) {33         int max = 0;34         int[][] states = new int[rowNum][colNum]; //make sure equal 0 all35         for(int r = 0; r < rowNum; r++) {36             for(int c = 0; c < colNum; c++) {37                 max = Math.max(max, getMaxLength(info, r, c, rowNum, colNum, states));38             }    39         }40         return max;41     }42     public int getMaxLength(int[][] info, int row, int col, int rowNum, int colNum, int[][] states) {43     44         if(row < 0 || row >= rowNum || col < 0 || col >= colNum) //如果输入的坐标越界的处理45             return 0;46         if(states[row][col] != 0) //所求位置的最大长度求过47             return states[row][col];48         49         int nextStep = findNextStep(info, row, col, rowNum, colNum);50         if(nextStep == 0) //所求位置在队尾51             return states[row][col] = 1;52         int maxLengthUp     = (nextStep & 8) == 8 ? getMaxLength(info, row - 1, col, rowNum, colNum, states) : 0;53         int maxLengthDown     = (nextStep & 4) == 4 ? getMaxLength(info, row + 1, col, rowNum, colNum, states) : 0;54         int maxLengthLeft     = (nextStep & 2) == 2 ? getMaxLength(info, row, col - 1, rowNum, colNum, states) : 0;55         int maxLengthRight     = (nextStep & 1) == 1 ? getMaxLength(info, row, col + 1, rowNum, colNum, states) : 0;56                 57         return max_4(maxLengthUp, maxLengthDown, maxLengthLeft, maxLengthRight) + 1;58     }59     public int findNextStep(int[][] info, int row, int col, int rowNum, int colNum) {60         int result = 0;61         62         if(row != 0 && info[row - 1][col] < info[row][col])             //up63             result |= 8;64         if(row != rowNum - 1 && info[row + 1][col] < info[row][col])     //down65             result |= 4;66         if(col != 0 && info[row][col - 1] < info[row][col])             //left67             result |= 2;68         if(col != colNum - 1 && info[row][col + 1] < info[row][col])     //right69             result |= 1;70         71         return result;72     }73     public int max_4(int i_1, int i_2, int i_3, int i_4) {74         return Math.max(Math.max(i_1, i_2), Math.max(i_3, i_4));75     }76 }

感觉不是很难,思路一上来就可以想出来,具体一些细节的处理也没有很坑的地方。

转载于:https://www.cnblogs.com/dsj2016/p/5237275.html

你可能感兴趣的文章
hdu6375 度度熊学队列
查看>>
hdu 2028
查看>>
eclipse往mysql里面插入数据时的乱码
查看>>
安装好ubuntu之后,如何进行分区
查看>>
DAY1小题
查看>>
Fragment基础----信息传递
查看>>
查看php-fpm开启的进程数以及每个进程的内存限制
查看>>
oracle课堂随笔----第二十三天
查看>>
线性回归——lasso回归和岭回归(ridge regression)
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Python开发【程序】:登录认证程序
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Chrome多线程模型
查看>>
运行第一个module
查看>>
Hadoop使用场景
查看>>
MYSQL--表分区、查看分区
查看>>
CCNA第三章
查看>>
MySQL 基础 (二)- 表操作
查看>>