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;这应该很好理…

C# —— Sort排序

Array.Sort(ints);// 默认的排序方式 正序排序 int[] ints { 1, 2, 3, 89, 20, 100 }; Console.Write(string.Join(",", ints)); 参数1 是排序的数组&#xff0c;参数2 是函数 函数的两个参数 是数组的两个元素&#xff0c; 当返回x-y 正序排序 Array.Sort(ints…

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的初级学习

使用C++编写TCP服务端程序

要使用Boost.Asio库来开发一个TCP服务端程序&#xff0c;你需要遵循以下步骤。下面的示例代码将演示如何创建一个简单的异步TCP服务器&#xff0c;它能够接收客户端连接&#xff0c;并异步处理请求和响应。 首先&#xff0c;确保你已经安装了Boost库&#xff0c;并在你的项目中…

普通打工人,如何应对AI的滚滚巨轮:智对AI巨轮,行稳致远——普通打工人的智慧修行

智对AI巨轮&#xff0c;行稳致远——普通打工人的智慧修行 阿弥陀佛&#xff0c;善哉善哉。在这科技日新月异的时代&#xff0c;AI之巨轮滚滚向前&#xff0c;势不可挡&#xff0c;令世间万物皆为之变。作为普通打工人&#xff0c;身处其间&#xff0c;我们虽非那掌舵之人&…

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;是每个数据实践者…

深入探讨 Google 竞价:开启海外市场的神秘钥匙与潜在风险

在这个充满挑战与机遇的数字化时代&#xff0c;Google竞价犹如开启神秘宝藏的一把钥匙&#xff0c;引领众多企业走向海外市场的康庄大道。身为数字营销领域的资深人士&#xff0c;我对Google竞价的独特魅力及潜在风险有着深刻理解。今日&#xff0c;我将带领大家深入探讨这一既…

华为OJ平台

华为OJ是一个在线编程平台&#xff0c;用于支持**华为公司的软件开发岗位招聘流程&#xff0c;考察候选人在算法设计、编程和调试等方面的技能水平**。以下是有关它的介绍&#xff1a; 1. **平台功能** - **多语言支持**&#xff1a;华为OJ平台支持多种编程语言&#xff0c;包括…

[C++]封装

一、封装的定义 封装是面向对象编程&#xff08;OOP&#xff09;的三大基本特性之一&#xff08;封装、继承、多态&#xff09;。它指的是将数据&#xff08;属性&#xff09;和操作这些数据的方法&#xff08;函数&#xff09;结合成一个独立的单元&#xff08;类&#xff09…

Perl 基础语法精讲:变量、操作符与控制结构

Perl 基础语法精讲&#xff1a;变量、操作符与控制结构 第1节&#xff1a;Perl 语法基础 1.1 Perl 语法的基本概念 Perl 是一种解释型的高级脚本语言&#xff0c;广泛用于文本处理、系统管理任务等。 1.2 语法结构和编码风格 使用 # 注释代码。遵循良好的编码风格&#xf…