10349 数字滑雪

为了解决这个问题,我们可以采用动态规划加深度优先搜索(DFS)的方法。这里的关键是使用一个辅助矩阵`dp`来存储从每个点开始的最长滑行距离。我们从每个点出发,尝试向四个方向滑行,只有当目标点的高度低于当前点的高度时,才可以滑行到那个点。通过递归的方式,我们可以找到从当前点出发的最长滑行距离,并将其存储在`dp`矩阵中,以避免重复计算。

### 伪代码
1. **初始化**:读入行数R和列数C,以及高度矩阵`heights`。创建一个同样大小的矩阵`dp`,初始化为-1,表示每个点的最长滑行距离尚未计算。
2. **定义DFS函数**:函数`dfs(x, y)`计算并返回从点`(x, y)`开始的最长滑行距离。
   - 如果`dp[x][y]`不为-1,直接返回`dp[x][y]`,表示这个点的最长滑行距离已经计算过。
   - 否则,对于`(x, y)`的四个方向的每个邻居`(nx, ny)`:
     - 如果`(nx, ny)`在矩阵范围内,且`heights[nx][ny] < heights[x][y]`,则递归调用`dfs(nx, ny)`。
     - 更新`dp[x][y]`为四个方向中的最大值加1。
   - 返回`dp[x][y]`。
3. **计算最长滑行距离**:对于矩阵中的每个点`(i, j)`,调用`dfs(i, j)`,并更新最长滑行距离的最大值。
4. **输出最长滑行距离**。

### C++代码实现

#include <iostream>
#include <vector>
using namespace std;int R, C;
vector<vector<int>> heights;
vector<vector<int>> dp;int dfs(int x, int y) {if (dp[x][y] != -1) return dp[x][y];dp[x][y] = 1; // 初始化为1,表示至少包含自己int dirs[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};for (auto &dir : dirs) {int nx = x + dir[0], ny = y + dir[1];if (nx >= 0 && nx < R && ny >= 0 && ny < C && heights[nx][ny] < heights[x][y]) {dp[x][y] = max(dp[x][y], dfs(nx, ny) + 1);}}return dp[x][y];
}int main() {cin >> R >> C;heights.resize(R, vector<int>(C));dp.resize(R, vector<int>(C, -1));for (int i = 0; i < R; ++i) {for (int j = 0; j < C; ++j) {cin >> heights[i][j];}}int longest = 0;for (int i = 0; i < R; ++i) {for (int j = 0; j < C; ++j) {longest = max(longest, dfs(i, j));}}cout << longest << endl;return 0;
}


这段代码首先读入高度矩阵,然后对每个点使用DFS加动态规划的方法计算从该点出发的最长滑行距离,并更新全局的最长滑行距离。最后输出这个最长距离。

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

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

相关文章

【Linux】进程控制(shell的模拟实现)

目录 一.进程终止 进程退出 exit(int status)和_exit(int status) exit的方式退出 _exit的方式退出 退出码 二.进程等待 进程等待方法 wait waitpid 非阻塞等待 三.进程替换 execl execv execle 四.shell模拟实现 一.进程终止 什么是进程终止&#xff0c;这应该很好理…

2024年企业最担心的是什么?隐私?数据安全?企业聊天软件?

随着科技日新月异的发展&#xff0c;企业在面对激烈的市场竞争时&#xff0c;也必须不断调整策略&#xff0c;积极应对新的挑战。 2024年&#xff0c;企业的关注焦点涉及到多个方面&#xff0c;然而可以认为其最担心的一些核心问题大致为以下几点&#xff1a; 隐私与数据安全。…

2024C++信息素养大赛-算法创意实践挑战_复赛真题(广东省)题目+参考答案和详细解析

第一题&#xff1a; #include<bits/stdc.h> using namespace std; int a,b;int main(){scanf("%d%d",&a,&b);printf("%d",a*b);return 0; } 第二题&#xff1a; #include<bits/stdc.h> using namespace std; int a,b,c;int main(){sca…

如何选择一款适合自己的鼠标?

在今天的数字时代&#xff0c;鼠标已经成为人们日常办公和娱乐的不可或缺的工具之一。然而&#xff0c;市面上各式各样的鼠标琳琅满目&#xff0c;如何选择一款适合自己的鼠标成为了一个令人困惑的问题。 鼠标的类型 在选择鼠标时&#xff0c;首先需要了解鼠标的类型。常见的…

昇思学习打卡-15-热门LLM及其他AI应用/基于MindNLP+MusicGen生成自己的个性化音乐

文章目录 MusicGen权重选择生成音乐采样模式&#xff08;Sampling&#xff09;贪心模式&#xff08;Greedy Search&#xff09;使用 学习使用MindNLPMusicGen生成自己的个性化音乐的流程 MusicGen MusicGen模型基于Transformer结构&#xff0c;可以分解为三个不同的阶段: 用户…

文心快码——百度研发编码助手

介绍 刚从中国互联网大会中回来&#xff0c;感受颇深吧。百度的展商亮相了文心快码&#xff0c;展商人员细致的讲解让我们一行了解到该模型的一些优点。首先&#xff0c;先来简单介绍一下文心快码吧。 文心快码&#xff08;ERNIE Code&#xff09;是百度公司推出的一个预训练…

AGI 之 【Hugging Face】 的【问答系统】的 [Haystack构建问答Pipeline] 的简单整理

AGI 之 【Hugging Face】 的【问答系统】的 [Haystack构建问答Pipeline] 的简单整理 目录 AGI 之 【Hugging Face】 的【问答系统】的 [Haystack构建问答Pipeline] 的简单整理 一、简单介绍 二、构建问答系统 三、用Haystack构建问答pipeline 1、检索器 2、阅读器 3、初…

24暑假计划

暑假计划&#xff1a; 1.从明天起开始将C语言的部分补充完整&#xff0c;这部分的预计在7月24日前完成 2.由于之前的文章内容冗余&#xff0c;接下来进行C语言数据结构的重新编写和后面内容的补充预计8月10号前完成 3.后续开始C的初级学习

YOLOv5改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

从新手到进阶:高效设计 Tableau 可视化的 5 种技巧 | 数据可视化分析

让我们一起跟着大神学习五个超实用的技巧&#xff0c;加速你的可视化分析之旅&#xff01; 在日常分析中&#xff0c;人人都想实现可视化最佳实践。然而&#xff0c;对于很多初学者来说&#xff0c;在还未熟练掌握 Tableau 的情况下&#xff0c;这种愿望貌似不太符合实际。 为…

【HarmonyOS】获取通讯录信息

【HarmonyOS】获取通讯录信息 一、问题背景&#xff1a; 在Android和IOS中&#xff0c;获取手机通讯录信息的方式&#xff0c;一般是申请通讯录权限后&#xff0c;获得手机所有的通讯录列表信息。 在鸿蒙中&#xff0c;因为权限方式安全性提高的变更&#xff1a;将用户权限限…

【八股系列】CSS盒模型:掌握网页布局的核心

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【Vue中的&#xff1c;keep-alive&#xff1e;组件&#xff1a;深入解析与实践指南】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&…

爬虫管理解决方案:让数据收集变得高效且合规

一、为何数据收集的效率与合规性同等重要&#xff1f; 随着大数据技术的飞速发展&#xff0c;数据收集已成为企业决策与市场洞察的核心驱动力。然而&#xff0c;在信息海洋中精准捕捞的同时&#xff0c;如何确保这一过程既高效又不触碰法律的红线&#xff0c;是每个数据实践者…

使用嵌入式知识打造智能手环:nRF52蓝牙开发实战(C++/BLE/传感器)

项目概述 现代人越来越注重健康管理&#xff0c;智能穿戴设备应运而生。本项目旨在利用低功耗蓝牙芯片nRF52832&#xff0c;结合加速度计、心率传感器、陀螺仪等传感器&#xff0c;开发一款功能完善、性能稳定的智能运动手环。该手环能够实时采集用户的运动数据和生理指标&…

用MATLAB绘制三向应力圆

% 定义主应力值 sigma1 100; % MPa sigma2 50; % MPa sigma3 -33; % MPa sigma_m1(sigma1 sigma3)/2; sigma_m2(sigma1 sigma2)/2; sigma_m3(sigma2 sigma3)/2; % 计算半径 r1 (sigma1 - sigma3) / 2; r2 (sigma1 - sigma2) / 2; r3 (sigma2 - sigma3…

《mysql篇》--JDBC编程

JDBC是什么 JDBC就是Java DataBase Connectivity的缩写&#xff0c;翻译过来就很好理解了&#xff0c;就是java连接数据库。所以顾名思义&#xff0c;JDBC就是一种用于执行SQL语句的JavaApl&#xff0c;是Java中的数据库连接规范。为了可以方便的用Java连接各种数据库&#xff…

【Python】从基础到进阶(三):深入了解Python中的运算符与表达式

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、运算符1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符 三、表达式1. 表达式的定义2. 运算符的优先级3. 使用括号提升可读性4. 组合运算符与复合表达式 四、案例&#xff1a;计…

微信管理神器能解决哪些问题?

1、为了自身利益&#xff0c;销售离职单独干&#xff08;带走客户&#xff09; 企业的客户都被销售带走了&#xff0c;那企业会遭到一定的损失&#xff0c;客户的资源是非常保密或重要的。 2、销售客户难以统计&#xff0c;不知道销售整体在干啥&#xff08;没有统计&#xf…

redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第40p-第p45的内容 文章目录 缓存穿透解决方案缓存空对象布隆过滤 解决方案实现缓存穿透总结 缓存雪崩解决方案 缓存击穿解决方…

Codeforces Round 957 (Div.3)

传送门 A. Only Pluses 时间限制&#xff1a;1秒 空间限制&#xff1a;256MB 输入&#xff1a;标准输入 输出&#xff1a;标准输出 问题描述 Kmes 写下了三个整数 a、b 和 c&#xff0c;以记住他要给 Noobish_Monk 的香蕉数量是 a b c。 Noobish_M…