J - 滑雪

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。
Sample Input
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Sample Output
25
思路:
广度优先搜索+记忆化数组,广搜用队列来实现,这次没有用递归了。
AC代码:

#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 120;
int vis[maxn][maxn];
int dp[maxn][maxn];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int r, c;
struct node
{int x, y, step;node(int x = 0, int y = 0, int step = 0){this->x = x;this->y = y;this->step = step;}
};
int solove(int x, int y)
{if (vis[x][y] != 0)return vis[x][y];int ans = 1;queue<node> que;que.push(node(x, y, 1));node temp;while (que.size()){temp = que.front(), que.pop();int nx, ny, ns;for (int i = 0; i < 4; i++){nx = temp.x + dx[i], ny = temp.y + dy[i];if (nx >= 1 && nx <= r && ny >= 1 && ny <= c && dp[nx][ny] < dp[temp.x][temp.y]){if (vis[nx][ny] != 0){ns = temp.step + vis[nx][ny];ans = max(ans, ns);}else{ns = temp.step + 1;que.push(node(nx, ny, ns));}}}}return vis[x][y] = max(ans, temp.step);
}
int main(void)
{//freopen("input.txt", "r", stdin);scanf("%d%d", &r, &c);for (int i = 1; i <= r; i++)for (int j = 1; j <= c; j++)scanf("%d", &dp[i][j]);int ans = 0;for (int i = 1; i <= r; i++)for (int j = 1; j <= c; j++)ans = max(ans, solove(i, j));printf("%d\n", ans);return 0;
}

滑雪(广搜+记忆数组+STL)相关推荐

  1. 鸣人和佐助 计蒜客--1214 广搜 三维数组

    题目链接 题目: 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大 ...

  2. 鸣人和佐助(记忆化广搜)

    我是传送门 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置.鸣人有一定数量的查克拉,每一个单 ...

  3. NYOJ 692 Chinese checkers(广搜)

    Chinese checkers 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 I think almost everyone play Chinese checker ...

  4. 图像有用区域(广搜)

    图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑 ...

  5. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  6. 深搜+回溯+广搜小结

    深搜 按照一定的顺序和规则,一直往深处走,直到走不通再返回,换一种路径重复上述步骤. 深搜一般可以找到问题的所有答案,但问题规模较大时,解集树的深度就会比较大并且比较宽,时间复杂度就会较高.与广搜相比 ...

  7. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  8. 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记

    算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...

  9. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

最新文章

  1. 以太坊,EOS和其他DApps的总数达到2,432,但没有大规模采用
  2. 什么是 SAP UI5 的 Element binding
  3. SAP ABAP关键字在Chrome浏览器里高亮显示的实现原理 - How is ABAP keyword highlight implemented in Chrome
  4. 665. 非递减数列
  5. python列表元素之和_python实现计算列表元素之和
  6. CVE-2021-21871: PowerISO 内存越界写漏洞
  7. Qt总结之二:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(二)
  8. BAT程序员手把手带你学算法-数组篇(理论知识剖析+5道经典面试题目)
  9. BAT 批处理注释命令rem、@rem和::
  10. DNS 解析出错导致 MySQL 无法连接
  11. python中的opencv读取数字_用python和OpenCV从图像中提取数字
  12. Android全面解析之Window机制
  13. 如何使用Pandas进行数据分析!最详细的数据分析教程!
  14. echarts 地图自定义图标_Echarts3.0 地图自定义图标
  15. 多目标优化算法:多目标非洲秃鹫优化算法MOAVOA(提供Matlab代码)
  16. 2014 ACM-ICPC 亚洲地区赛 西安站小结
  17. java json ajax数据处理,echart显示 问题待解决
  18. 通过京东商品ID获取京东商品评论数据,京东商品评论API接口,接口说明接入方案
  19. Python格式化JSON文件
  20. 淘宝店如何发放优惠券?

热门文章

  1. 【Android】通过命令行adb install 将apk下载到手机之中
  2. 直接寻址、间接寻址、立即数寻址
  3. linux操作mysql数据库
  4. 非学校用户如何免费下载论文
  5. OpenStack云计算平台部署 单节点
  6. 两步解决macbook电池不充电
  7. Android 手机重启解决方案
  8. matlab中图线颜色大全
  9. 手机开热点显示互联网无服务器,win10热点无互联网连接的具体解决办法【图文】...
  10. 【ClearCase 学习笔记 】之(4/4)CC基本操作介绍