poj1088
2016-01-04 22:17
281 查看
poj1088
题意:给出一个矩阵,求出一个点上下左右走按递减的最大长度。
分析:思想差不多算是dfs,递归一块,如果要列可以列出dp方程,也算dp。大体的跟dfs递归算法一样,每个点有且仅有一次能被操作到,这可以用color[][]数组来解决。一旦找到上下左右比他小的,进行递归,并且长度加一。最后返回一个上下左右最大的一个数。
AC java代码如下:
题意:给出一个矩阵,求出一个点上下左右走按递减的最大长度。
分析:思想差不多算是dfs,递归一块,如果要列可以列出dp方程,也算dp。大体的跟dfs递归算法一样,每个点有且仅有一次能被操作到,这可以用color[][]数组来解决。一旦找到上下左右比他小的,进行递归,并且长度加一。最后返回一个上下左右最大的一个数。
AC java代码如下:
import java.util.Scanner; public class poj1088 { static int r; static int c; static int[][] color; static int[][] arr; static int len[][]; static int max = 0; public static void main(String[] args) { Scanner scan = new Scanner(System.in); r = scan.nextInt(); c = scan.nextInt(); arr = new int[r][c]; color = new int[r][c]; len = new int[r][c]; for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) { arr[i][j] = scan.nextInt(); color[i][j] = 0; } for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) { if (color[i][j] == 0) dfs(i, j); if (len[i][j] > max) max = len[i][j]; } System.out.println(max); } private static int dfs(int i, int j) { if (color[i][j] == 1) return len[i][j]; else { int temp = 1; color[i][j] = 1; if (i > 0 && arr[i][j] > arr[i - 1][j]) { temp = dfs(i - 1, j) + 1; } if (j > 0 && arr[i][j] > arr[i][j - 1]) { int temp1 = dfs(i, j - 1) + 1; if (temp < temp1) temp = temp1; } if (i < r - 1 && arr[i][j] > arr[i + 1][j]) { int temp1 = dfs(i + 1, j) + 1; if (temp < temp1) temp = temp1; } if (j < c - 1 && arr[i][j] > arr[i][j + 1]) { int temp1 = dfs(i, j + 1) + 1; if (temp < temp1) temp = temp1; } len[i][j] = temp; return temp; } } }
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- 使用递归算法求第30位数的值
- 对C语言中递归算法的深入解析
- c#汉诺塔的递归算法与解析
- 关于PHP递归算法和应用方法介绍
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- Java递归算法的使用分析
- Java算法之递归算法计算阶乘
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- LFC1.0.0 版本发布
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台