POJ 1088 滑雪 (深搜+DP)
时间:2020-01-15
本文章向大家介绍POJ 1088 滑雪 (深搜+DP),主要包括POJ 1088 滑雪 (深搜+DP)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
http://poj.org/problem?id=1088
题目描述:
Glory非常喜欢玩滑滑梯游戏,下面给出了一个n,m的滑道,其中的数字表示滑道的高度。Glory可以从一个点出发向下滑行,每次只能滑行到相邻的位置(上下左右)中高度严格低于当前高度的地方,不能重复划行已经滑行过的地方,但他希望在这个滑道上滑行尽量远的距离,也即是找一条最长的滑道。
Input
第一行输入两个数n,m代表滑梯范围行n和列m(1 <= n,m <= 100)。下面是n行,每行有m个整数,代表高度h,(0<=h<=20000)
Output
输出一个值,代表Glory能够在滑滑梯上面滑行的最长长度是多少
Sample Input
3 3
9 1 2
5 6 7
8 4 3
Sample Output
4
Sample Input
4 7
7 6 5 4 3 2 1
1 5 1 1 1 1 1
1 4 3 1 1 1 1
1 5 6 7 8 1 1
Sample Output
7
hint
样例1:7->6->4->3 长度为4
面向题解的思路:
我觉得有点类似于求连通区域个数的问题,因为都是在一块地图上走嘛。
记录的目的是为了防止超时。
数组dp中存放的就是每个点所能够走的最远距离。
过程主要是记录某个点能够到达的最长的长度。然后由某一个点向四个方向延伸,到达某点的时候,如果这点已经遍历过的话,就直接返回值就行了,否则就由这一点去遍历。
代码:
1 #include <cmath> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <climits> 6 #include <map> 7 #include <set> 8 #include <queue> 9 #include <stack> 10 #include <vector> 11 #include <string> 12 #include <iostream> 13 #include <algorithm> 14 15 #define N 100010 16 17 using namespace std; 18 19 typedef long long int ll; 20 int n, m; 21 int rec[110][110]; 22 int grap[110][110]; 23 int dx[4]={0, 1, 0, -1}; int dy[4]={1, 0, -1, 0}; 24 25 bool torf(int i, int j){ 26 return (i>=0 && i<n && j>=0 && j<m); //判断是否越界 27 } 28 //找距离此点的最远距离 29 int find_max(int i, int j){ 30 if(rec[i][j]>0) //如果已经遍历此点 31 return rec[i][j]; 32 int k, maxl; 33 int nx, ny; 34 maxl=0; 35 //四个方向的遍历 36 for(k=0; k<4; k++){ 37 nx=i+dx[k]; 38 ny=j+dy[k]; 39 //充要的条件还有下一点的价值大于目前点的价值 40 if(torf(nx, ny) && grap[nx][ny]>grap[i][j]){ 41 maxl=max(maxl, find_max(nx, ny)); 42 } 43 } 44 return rec[i][j]=maxl+1; //能够走的最远距离加上本身 45 } 46 int main() 47 { 48 int i, j; 49 scanf("%d%d", &n, &m); 50 for(i=0; i<n; i++){ 51 for(j=0; j<m; j++){ 52 scanf("%d", &grap[i][j]); 53 rec[i][j]=0; 54 } 55 } 56 int ans=INT_MIN; 57 for(i=0; i<n; i++){ 58 for(j=0; j<m; j++){ 59 ans=max(ans, find_max(i, j)); //每次搜索就更新一下值 60 } 61 } 62 printf("%d\n", ans); 63 return 0; 64 }
原文地址:https://www.cnblogs.com/Arrokoth/p/12191219.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Postgresql 从那个点看要优于 ORACLE SQL SERVER MYSQL
- VBA解析VBAProject 04——run length encoding
- TRTC Android端开发接入学习之实现语音聊天室(九)
- VBA解析VBAProject 03——解析dir流
- VBA解析VBAProject 01——实现的功能
- VBA解析VBAProject 02——解析
- 光怪陆离的世界之Delaunay三角剖分和Voronoi图
- Angular里的routerLink不能按照期望工作的一个问题
- 哈希算法在判定树同构方面的应用(上)
- 为啥会内存泄漏?一个免费的检测工具来了
- iOS开关按钮,纯CSS给你安排上了
- 面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
- 一次“内存泄露”引发的血案
- 一次压缩引发堆外内存过高的教训
- 第2章代码-图形系统