算法提高 最长滑雪道(动态规划 + 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) 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 在小程序开发中使用 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 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区