Acwing 记忆化搜索

news2024/12/26 15:07:58

Acwing 901.滑雪

在这里插入图片描述
输入样例:

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

实现思路:在这里插入图片描述

  • 状态表示f[i][j],表示从点(i,j)出发的最长路径长度
  • 集合划分可分为四种情况:从点(i,j)出发
    • 向左走到(i,j-1),状态转换为f[i][j-1]+1
    • 向右走到(i,j+1),状态转换为f[i][j+1]+1
    • 向上走到(i-1,j),状态转换为f[i-1][j]+1
    • 向下走到(i+1,j),状态转换为f[i+1][j]+1
  • 注意:在向某个方向走时要判断是否走出边界以及所走的方向的值是否小于当前位置的值
  • 没有给出固定出发点,所以要遍历每个点为起点出发

具体实现代码(详解版):

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

using namespace std;

const int N = 310;
int f[N][N], h[N][N]; // f[i][j] 表示以(i, j)为起点的最长路径长度,h[i][j] 表示点(i, j)的高度
int n, m; // n表示矩阵的行数,m表示矩阵的列数
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1}; // 表示上下左右四个方向

// 以 (x, y) 为起点的最长路径长度,返回 f[x][y]
int dp(int x, int y) {
    if (f[x][y] != -1) return f[x][y]; // 如果已经计算过,以 (x, y) 为起点的路径长度,直接返回
    f[x][y] = 1; // 初始路径长度为1,至少包括自己这个点
    for (int i = 0; i < 4; i++) { // 遍历上下左右四个方向
        int xx = x + dx[i], yy = y + dy[i]; // 计算新位置 (xx, yy)
        if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && h[x][y] > h[xx][yy]) {
            // 如果新位置在矩阵范围内,且高度低于当前点
            f[x][y] = max(f[x][y], dp(xx, yy) + 1); // 递归计算 (xx, yy) 的最长路径,更新当前点的最长路径长度
        }
    }
    return f[x][y]; // 返回以 (x, y) 为起点的最长路径长度
}

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); // 初始化 f 数组为 -1,表示还未计算每个点的最长路径长度

    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/2196667.html

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

相关文章

Mybatis框架梳理——更新中

Mybatis框架梳理 前言1.ORM2.模块划分2.1 ORM的实现2.2 SQL的映射2.3 插件机制2.4 缓存机制2.5 其他2.5.1 用到的设计模式 3. 愿景 前言 如果让我聊一聊mybatis&#xff0c;我该怎么说呢&#xff1f;开发中时时刻刻都在用它&#xff0c;此时此刻&#xff0c;脑海中却只浮现ORM框…

揭秘:ARM 工业计算机缘何替代树莓派

工业自动化、物联网以及嵌入式系统等领域对高性能、稳定可靠的计算设备的需求日益增长。国产 ARMxy工业计算机的出现&#xff0c;为这些领域带来了新的机遇和选择。特别是那些采用国产芯片如全志、瑞芯微等&#xff0c;并支持 Ubuntu 系统的工业计算机&#xff0c;展现出了令人…

微信公众号菜单栏----第⑦篇

如果你是新手小白&#xff0c;请从微信公众号开发第一篇看起&#xff1a;微信公众号开发-接口配置信息&#xff08;第①篇&#xff09;_微信公众号 接口配置信息怎么设置-CSDN博客 代码&#xff1a; <?php// 获取菜单配置数据$menuConfig array(button > array(array(…

认知战认知作战:激发认知战战术分享热情的秘诀

认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 关键词&#xff1a;认知战, 认知作战, 创造独特体验, 融入社交元素, 情感共鸣策略, 分享激励机制, 战略形象塑造, 个性化内容推荐,认知作战,新质生产力,人类…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者&#xff1a;来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序&#xff0c;而无需更改应用程序代码。 在快节奏的软件开发领域&#xff0c;尤其是在云原生…

网络资源模板--Android Studio 通讯录App

目录 一、项目演示 二、项目测试环境 三、项目详情​编辑 四、完整的项目源码 一、项目演示 网络资源模板--通讯录App 二、项目测试环境 三、项目详情 首页 package com.example.addressbook.activity;import androidx.appcompat.app.AppCompatActivity; import androidx.c…

Qwen变体新成员加一,英伟达训练 NVLM-D-72B 视觉大模型

今天&#xff08;2024 年 9 月 17 日&#xff09;&#xff0c;我们推出了前沿级多模态大语言模型&#xff08;LLM&#xff09;系列 NVLM 1.0&#xff0c;它在视觉语言任务上取得了最先进的结果&#xff0c;可与领先的专有模型&#xff08;如 GPT-4o&#xff09;和开放存取模型&…

2024高校网络安全管理运维赛 wp

0x00 前言 本文是关于“2024高校网络安全管理运维赛”的详细题解&#xff0c;主要针对Web、Pwn、Re、Misc以及Algorithm等多方向题目的解题过程&#xff0c;包含但不限于钓鱼邮件识别、流量分析、SQLite文件解析、ssrf、xxe等等。如有错误&#xff0c;欢迎指正。 0x01 Misc 签到…

纯干货!一个白帽子挖漏洞经验细致分享_白帽子找漏洞一天能多少

不知道是不是很多人和我一样&#xff0c;每天刷着漏洞&#xff0c;看着自己的排名一位一位的往上提升&#xff0c;但是&#xff0c;但是。总感觉怪怪的&#xff0c;为什么别人刷的漏洞都是现金&#xff0c;而自己刷的漏洞都是给库币。别人一天为什么提交那么多漏洞&#xff0c;…

winform appconfig

文章目录 添加一个appconfig配置文件的结构读取写入 这是wiform自带的配置文件&#xff0c;格式为xml 其位置在程序根目录下 添加一个appconfig 首先默认情况下&#xff0c;winform会自动创建一个名叫appconfig的配置文件&#xff0c;位于程序根目录下 如果需要手动创建更多…

【路径规划】基于球面向量的粒子群优化算法(SPSO)

摘要 本文提出了一种基于球面向量的粒子群优化算法&#xff08;Spherical Vector-based Particle Swarm Optimization, SPSO&#xff09;用于解决路径规划问题。该算法通过球面坐标系表示粒子的位置更新&#xff0c;增强了搜索空间的探索能力和全局优化性能。通过与遗传算法&a…

浅析基于双碳目标的光储充一体化电站状态评估技术

摘要&#xff1a;全国碳市场拉开了我国能源结构加速转型的大幕&#xff0c;催生了光伏、储能和新能源汽车等一批绿色产业的兴起&#xff0c;同时随着利好政策扶植和消费者的青睐&#xff0c;光伏、储能和新能源汽车市场均加快发展。但传统的充电桩和光伏电站都是分开建设&#…

基于SSM的家庭理财系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题目的: 随着社会的进步&#xff0c;我国经济的快速发展&#xff0c;人们的生活水平提高了&#xff0c;现在人们已经不仅仅满足于能够吃得饱穿得好&#xff0c;现在的人们在想着如何丰富自己的精神世界&#xff0c;想着如何去…

Win11环境下 DELPHI 12.2 安装全过程

背景描述 DELPHI作为曾经的Windows原生开发的王者&#xff0c;DELPHI12.2可以实现Windows、Android、IOS、macOS、Linux的应用开发&#xff0c;现在还有少数企业使用&#xff0c;大多数用户是从传统D3/4/5/6/7坚持下来的爱好者&#xff0c;2ccc.com里有相关内容&#xff0c;但…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化&#xff0c;图像的压缩率以及对应的图像质量指标PSN…

QT使用websocket实现语音对讲

简介&#xff1a; 本文所描述的功能和代码&#xff0c;是基于QT的开发环境。在QT上使用websocket&#xff0c;接受和发送pcm音频&#xff0c;实现了语音对讲功能。经自测&#xff0c;该功能可以正常使用&#xff0c;以下是相关代码的分享。 void MainWindow::on_pushButton_Ope…

Linux学习笔记(七):磁盘的挂载与扩展

Linux学习笔记&#xff08;七&#xff09;&#xff1a;磁盘的挂载与扩展 在虚拟机环境中&#xff0c;当我们的存储空间不足时&#xff0c;添加一块新的硬盘显得尤为重要。 1. 新增磁盘 首先&#xff0c;你需要确保有一块物理磁盘或虚拟磁盘。在虚拟机管理器中&#xff0c;你可以…

1.4TB! 全台湾2024年三维建筑模型3DTiles数据

在今年1月13日&#xff0c;我写了一篇文章&#xff0c;详细介绍了了全台湾2023年三维建筑模型数据以及数据背景。隔了8个月之后&#xff0c;我对全岛建筑模型数据进行了更新,不仅在数量上有增长&#xff0c;而且数据显示性能也进行了优化&#xff0c;下面我针对对2024年数据进行…

探索Python文本处理的新境界:textwrap库揭秘

文章目录 **探索Python文本处理的新境界&#xff1a;textwrap库揭秘**一、背景介绍二、textwrap库是什么&#xff1f;三、如何安装textwrap库&#xff1f;四、简单函数使用方法4.1 wrap()4.2 fill()4.3 shorten()4.4 dedent()4.5 indent() 五、实际应用场景5.1 格式化日志输出5…

黑龙江等保测评详细指南

一、什么是等保测评&#xff1f; 等保&#xff08;信息安全等级保护&#xff09;是指根据信息系统的重要性和安全需求&#xff0c;对其进行分级保护的制度。黑龙江省的等保测评旨在评估信息系统的安全性&#xff0c;确保其符合国家和地方的安全标准。 二、等保测评的必要性 1…