滑雪(广搜+记忆数组+STL)
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)相关推荐
- 鸣人和佐助 计蒜客--1214 广搜 三维数组
题目链接 题目: 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大 ...
- 鸣人和佐助(记忆化广搜)
我是传送门 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置.鸣人有一定数量的查克拉,每一个单 ...
- NYOJ 692 Chinese checkers(广搜)
Chinese checkers 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 I think almost everyone play Chinese checker ...
- 图像有用区域(广搜)
图像有用区域 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑 ...
- 深搜、广搜、搜索剪枝
搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...
- 深搜+回溯+广搜小结
深搜 按照一定的顺序和规则,一直往深处走,直到走不通再返回,换一种路径重复上述步骤. 深搜一般可以找到问题的所有答案,但问题规模较大时,解集树的深度就会比较大并且比较宽,时间复杂度就会较高.与广搜相比 ...
- 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】
图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...
- 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记
算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
最新文章
- 以太坊,EOS和其他DApps的总数达到2,432,但没有大规模采用
- 什么是 SAP UI5 的 Element binding
- SAP ABAP关键字在Chrome浏览器里高亮显示的实现原理 - How is ABAP keyword highlight implemented in Chrome
- 665. 非递减数列
- python列表元素之和_python实现计算列表元素之和
- CVE-2021-21871: PowerISO 内存越界写漏洞
- Qt总结之二:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(二)
- BAT程序员手把手带你学算法-数组篇(理论知识剖析+5道经典面试题目)
- BAT 批处理注释命令rem、@rem和::
- DNS 解析出错导致 MySQL 无法连接
- python中的opencv读取数字_用python和OpenCV从图像中提取数字
- Android全面解析之Window机制
- 如何使用Pandas进行数据分析!最详细的数据分析教程!
- echarts 地图自定义图标_Echarts3.0 地图自定义图标
- 多目标优化算法:多目标非洲秃鹫优化算法MOAVOA(提供Matlab代码)
- 2014 ACM-ICPC 亚洲地区赛 西安站小结
- java json ajax数据处理,echart显示 问题待解决
- 通过京东商品ID获取京东商品评论数据,京东商品评论API接口,接口说明接入方案
- Python格式化JSON文件
- 淘宝店如何发放优惠券?