算法提高 最长滑雪道(动态规划 + Dfs)

2023-11-12

试题 算法提高 最长滑雪道

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  小袁非常喜欢滑雪, 因为滑雪很刺激。为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 小袁想知道在某个区域中最长的一个滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。如下:
  一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
  你的任务就是找到最长的一条滑坡,并且将滑坡的长度输出。 滑坡的长度定义为经过点的个数,例如滑坡24-17-16-1的长度是4。
输入格式
  输入的第一行表示区域的行数R和列数C(1<=R, C<=10)。下面是R行,每行有C个整数,依次是每个点的高度h(0<= h <=10000)。
输出格式
  只有一行,为一个整数,即最长区域的长度。
样例输入
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
样例输出
25


题解

这题可以用动态规划的思想来做,因为图中的某点(a)能滑的最大的格子数是一个定值,无论其之前是怎么到达这里的,好好体会,因为之前到达它的格子(b)必定比它高,而这个格子 a 往下能滑到的格子必定不包括 b 。这样就可以用记忆化搜索来解决这题。
所以只要:

状态: dp[r][c] 第r行第c列格子为起点最大能滑的格子数
状态转移:
	for (int i = 0; i < 4; i++)		//取四个方向最大的(当然还要判断是否可走)
			dp[r][c]=max(dp[r][c],dfs(newr, newc)+1);

AC代码如下:

//最长滑雪道
//蓝桥杯 算法提高 ADV-294
#include<iostream>
#include<algorithm>
using namespace std;

const int maxn = 10 + 2;
int graph[maxn][maxn];
int dp[maxn][maxn];
int row, col;
const int nnext[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };		//行走的方向

bool check(int newr,int newc, int r, int c){				//判断是否合法
	if (newr >= 0 && newr < row && newc >= 0 && newc < col)	//判断是否超出界限
		if (graph[r][c] > graph[newr][newc])				//判断高度是否符合要求
			return true;
	return false;
}

int dfs(int r,int c){
	int newr, newc;
	
	if(dp[r][c]!=-1)	//之前访问过
		return dp[r][c];
	
	dp[r][c]=1;
	for (int i = 0; i < 4; i++){
		newr = r + nnext[i][0];
		newc = c + nnext[i][1];
		if (check(newr, newc, r, c))
			dp[r][c]=max(dp[r][c],dfs(newr, newc)+1);
	}
	return dp[r][c];
}

int main(){
	int max_length=0;
	cin >> row >> col;
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++){
			cin >> graph[i][j];
			dp[i][j]=-1;
		}
			
	for (int i = 0; i < row; i++)	
		for (int j = 0; j < col; j++)
			max_length=max(max_length,dfs(i,j));
			
	cout << max_length << endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法提高 最长滑雪道(动态规划 + Dfs) 的相关文章

随机推荐

  • 在小程序开发中使用 npm

    微信小程序在 2 2 1 版本后增加了对 npm 包加载的支持 使得小程序支持使用 npm 安装第三方包 1 在小程序中加载 npm 包 npm install miniprogram datepicker production node
  • 数组查找操作:寻找第二大

    一 找出数组中第二大的数字 public class Main public static void main String args int max 0 int smax 0 int arr 1 2 3 4 6 8 7 if arr 0
  • 解决bash: mysql: command not found 的方法【linux mysql命令 】

    linux下 在mysql正常运行的情况下 输入mysql提示 mysql command not found 遇上 bash mysql command not found的情况别着急 这个是因为 usr local bin目录下缺失my
  • C#使用欧姆龙PLC的Fins协议读写PLC地址(基本封装)

    FINS通讯概述 FINS factory interface network service 通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令 响应系统 运用 FINS指令可实现各种网络间的无缝通信 通过编程发送FINS指令 上位机
  • Unity中用到的数学知识 整理 (为自己)

    缓动数学知识 转自 http easings net en CSS CSS properties transition and animation allow you to pick the easing function Unfortun
  • Spring两大特性:IOC和AOP

    Spring拥有两大特性 IOC 控制反转 AOP 面向切面编程 Spring注解 Spring为我们提供了多个方便的注解 例如 Controller 标明为控制层组件 Service 服务层组件 Repository DAO层 Compo
  • openssl hmac源码分析

    hmac 原理 HMAC 用于保护消息的完整性 它采用摘要算法对消息 填充以及秘密密钥进行混合 运算 在消息传输时 用户不仅传送消息本身 还传送 HMAC 值 接收方接收数据后也进 行 HMAC 运算 再比对 MAC 值是否一致 由于秘密密
  • 【ORACLE】ora-12519错误分析解决

    首先检查process和session的使用情况 在sqlplus里面查看 SQL gt show parameter processes NAME TYPE VALUE aq tm processes integer 0 db write
  • gdb常用的调试方法

    1 安装gdb yum install gdb 2 打印线程的堆栈 1 ps afx 查看进程id 2 attach 正在运行的进程 gdb debugme pid 3 set logging file tmp test txt 设置操作g
  • hadoop :java.io.FileNotFoundException: File does not exist:

    点击打开链接转自 http blog 163 com silver9886 126 blog static 35971862201441134010403 1 用hadoop的eclipse插件下M R程序的时候 有时候会报 Excepti
  • JSP pagecontext对象的简介说明

    转自 JSP pagecontext对象的简介说明 下文笔者将讲述pagecontext对象的简介说明 如下所示 pageContext对象的简介 pageContext对象是javax servlet jsp PageContext类的实
  • 解决问题记录16:jar包冲突解决

    当项目中jar遇到冲突问题时 一般我的处理方式就是 比较冲突jar 找出冲突的地方 自己取舍排除即可
  • 实现图片验证码与手机短信验证码

    实现图片验证码与手机短信验证码 1 HTML 代码
  • git clone失败:Cloning into... fatal: unable to access... error setting certificate verify locations

    参考链接 others How to solve gnutls handshake failed error when doing git clone from github com Errors Cloning into GlobalTr
  • Spring5框架新功能

    文章目录 Spring5框架新功能 Spring5框架新功能 1 整个Spring5框架的代码基于java8 运行时兼容JDK9 许多不建议使用的类和方法在代码库中删除 2 Spring5框架自带了通用的日志封装 1 Spring5已经移除
  • ant design pro开发环境搭建

    命令行窗口使用管理员身份打开 以免出现其他不可意料的错误 npm create umi 2 依次选择 gt ant design pro gt Prov4 gt TypeScript gt simple gt antd 4 3 npm in
  • 刷脸支付服务商巧借东风顺势而为

    银行可以从自身占优势的园区场景切入 区别于支付宝和微信市场策略 差异化的快速占领市场 我们通常说的园区 包括了校园 景区 办公楼 以及各类工业园区和行政园区 前期这块市场主要都是由传统银行作为收单机构提供服务 疫情过后 整体刷脸支付将再起步
  • 2022年浙江省中职组“网络空间安全”编码信息获取

    什么是wireshark wiresharek wire0078 pcap数据包 wiresharek Wireshark 前称Ethereal 是一个网络封包分析软件 网络封包分析软件的功能是检索取网络封包 并同时显示出最详细的网络封包数
  • 图像算法工程师常考的面试问题附回答

    什么是图像滤波 介绍一下常用的图像滤波器有哪些 什么是卷积神经网络 CNN 它的结构是什么样的 为什么在图像处理中表现出色 什么是图像分割 介绍一下图像分割的方法和应用场景 什么是图像匹配 介绍一下图像匹配的方法和应用场景 什么是直方图均衡
  • 算法提高 最长滑雪道(动态规划 + Dfs)

    试题 算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区