动态规划(记忆化搜索)

news2024/11/20 20:30:31

AcWing 901. 滑雪

给定一个 R行 C 列的矩阵,表示一个矩形网格滑雪场。

矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。

一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。

当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。

下面给出一个矩阵作为例子:

 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−2−124−17−2−1。

在给定矩阵中,最长的滑行轨迹为 25−24−23−…−3−2−125−24−23−…−3−2−1,沿途共经过 2525 个区域。

现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。

输入格式
第一行包含两个整数 R 和 C。

接下来 R 行,每行包含 C个整数,表示完整的二维矩阵。

输出格式
输出一个整数,表示可完成的最长滑雪长度。

数据范围
1≤R,C≤300
0≤矩阵中整数≤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

思路:

代码: 

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 310;

int n, m;
int h[N][N], f[N][N];
int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
int dp(int x, int y)
{
    int &v = f[x][y];
    
    if (v != -1) return v;
    
    v = 1;
    for (int i = 0; i < 4; i ++ )
    {
        int a = x + dx[i], b = y + dy[i];
    
        if (a >= 1 && a <= n && b >= 1 && b <= m && h[x][y] > h[a][b])
        {
            v = max(v, dp(a, b) + 1);
        }
    }
    return v;
}
int main()
{
    cin >> n >> m;
    
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            cin >> h[i][j];
        
        
    memset(f, -1, sizeof f);    
    int res = 0;
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
           res = max(res, dp(i, j));
           
    cout << res << endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git更新代码时显示“auto-detection of host provider took too long“移除方法

git更新代码时显示"auto-detection of host provider took too long"移除方法 问题描述 在windows操作系统&#xff0c;未连接互连网电脑&#xff0c;更新内网代码库时显示“auto-detection of host provider took too long (>2000ms)”&#xff0c;如下图所示。…

idea 中配置 maven

前文叙述&#xff1a; 配置 maven 一共要设置两个地方&#xff1a;1、为当前项目设置2、为新项目设置maven 的下载和安装可参考我之前写过的文章&#xff0c;具体的配置文章中也都有讲解。1、为当前项目进行 maven 配置 配置 VM Options: -DarchetypeCataloginternal2、为新项…

设将n(n>1)个整数存放在一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移P(0<P<n)个位置

设将n&#xff08;n>1&#xff09;个整数存放在一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移P&#xff08;0<P<n&#xff09;个位置。即将R中保存的数据由&#xff08;x0,x1…,xn-1&#xff09;变为&#xff08;xp,xp1…x0,x…

vscode下ssh免密登录linux服务器

vscode使用ssh免密登录linux 1、安装SSH插件2、生成密钥3、linux安装ssh服务4、linux下配置公钥5、vscode远程登录 注&#xff1a;测试环境为window10Ubuntu1804/Ubuntu2204 1、安装SSH插件 扩展->搜索SSH->点击install进行安装&#xff0c;如下图所示&#xff1a; 2、…

【Linux】安装部署Redis

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis安装部署linux 1.gcc编译环境2.c库环境3.…

记src-Juniper

一、hunter搜索web.title”Juniper Web Device Manager”&#xff0c;查找到香港的一处资产。 二、访问相关网页&#xff0c;界面就是Juniper登录界面。 三、根据编号为CVE-2023-36845的利用方法&#xff0c;抓包&#xff0c;修改提交方式&#xff0c;成功读取到文件。 原始包…

09. 主频和时钟配置

09. 主频和时钟配置 硬件原理图分析7路PLL时钟源时钟树简介内核时钟系统主频设置CCM_CACRRCCSRCCM_ANALOG_PLL_ARMn代码实例 PFD时钟设置PLL2的4路设置PLL3的4路设置代码实例 AHB、IPG和PERCLK根时钟设置AHB_CLK_ROOT 和 IPG_CLK_ROOTPERCLK_CLK_ROOTCCM_CBCDRCCM_CBCMRCCM_CSC…

Redis | 数据结构(02)SDS

一、键值对数据库是怎么实现的&#xff1f; 在开始讲数据结构之前&#xff0c;先给介绍下 Redis 是怎样实现键值对&#xff08;key-value&#xff09;数据库的。 Redis 的键值对中的 key 就是字符串对象&#xff0c;而 value 可以是字符串对象&#xff0c;也可以是集合数据类型…

创建并启动华为HarmonyOS本地与远程模拟器及远程真机

1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机

论环境如何影响我们的一切

本心、输入输出、结果 文章目录 论环境如何影响我们的一切前言相关书籍极大影响我们的潜在客观环境环境带给我们的影响是如何进行具象化的大的框架体系是什么弘扬爱国精神论环境如何影响我们的一切 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq_15071263 如果…

每日一练——返回链表的中间结点

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

数据库扫描工具scuba

目录: Scuba的简单介绍 Scuba的安装 :Windows安装 、Linux安装 Scuba的扫描及结果分析 一、什么是Scuba? Scuba是一款网络安全扫描工具,而非数据库扫描软件。Scuba支持对Web应用程序、操作系统、网络协议等进行扫描,以发现潜在的安全漏洞和风险,并提供详细的扫描结果报告…

VM及WindowsServer安装

目录 一.操作系统的简介及常用的操作系统 二.windows的安装 安装VMWare虚拟机 注意点一 ​编辑 注意点二 三.安装配置Windows Server 2012 R2 四、虚拟机的环境配置及连接 1. 主机连接虚拟机 2. 虚拟机环境配置及共享 3. 环境配置 一.操作系统的简介及常用的操作系…

心理咨询医院预约和挂号系统

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 系统分为&#xff1a;患者端、医生端、管理员端。 患者端 医生端 管理员端

基本的设备使用

一.微步的态势感知 经常使用的 威胁---实时监控 里面有重要信息 里面有威胁名称 还有攻击类型 威胁--告警主机 查看主机威胁 webshell 查看打到webshell 调查---攻击者分析 平台管理 ---审计日志 2.防火墙 华为 usg6000 策略---黑名单 风塔防火墙…

JVM相关面试题(每日一练)

1. 什么是垃圾回收机制&#xff1f; 垃圾收集 Garbage Collection 通常被称为“GC”&#xff0c;它诞生于1960年 MIT 的 Lisp 语言&#xff0c;经过半个多世纪&#xff0c;目前已经十分成熟了。 jvm 中&#xff0c;程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭&a…

深度解读MediaBox SDKs如何实现技术架构升级

本专栏将分享阿里云视频云MediaBox系列技术文章&#xff0c;深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践&#xff0c;一起开启音视频的开发之旅。本文为MediaBox技术架构篇&#xff0c;重点从音视频终端SDK的技术架构、优化设计、架构优势等方面&#xff…

卡巴斯基8(2009)杀毒软件

下载地址&#xff1a;https://user.qzone.qq.com/512526231/main https://user.qzone.qq.com/3503787372/main

简单8位CPU设计verilog微处理器,源码/视频

名称&#xff1a;8位CPU设计微处理器 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 设计一个简单的处理器&#xff0c;可以实现加减法以及简单的逻辑运算。 设计包括程序计数器电路&#xff0c;指令存储器电路&#xff0c;指令译码器电路(控制器…

redis 配置主从复制,哨兵模式案例

哨兵(Sentinel)模式 1 . 什么是哨兵模式&#xff1f; 反客为主的自动版&#xff0c;能够自动监控master是否发生故障&#xff0c;如果故障了会根据投票数从slave中挑选一个 作为master&#xff0c;其他的slave会自动转向同步新的master&#xff0c;实现故障自动转义 2 . 原理…