华为OD机试 - 跳格子3 - 动态规划(Java 2024 C卷 200分)

news/2024/5/21 20:18:42

在这里插入图片描述

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小明和朋友们一起玩跳格子游戏,

每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7],

从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。

二、输入描述

第一行输入总的格子数量 n

第二行输入每个格子的分数 score[i]

第三行输入最大跳的步长 k

三、输出描述

输出最大得分

备注:

  1. 格子的总长度 n 和步长 k 的区间在 [1, 100000]
  2. 每个格子的分数 score[i] 在 [-10000, 10000] 区间中

1、输入

6
1 -1 -6 7 -17 7
2

2、输出

14

3、说明

输出最大得分数,小明从起点score[0]开始跳,第一次跳score[1],第二次跳到score[3],第三次跳到score[5],因此得到的最大的得分是score[0] + score[1] + score[3] + score[5] = 14

四、解题思路

这个问题可以通过动态规划的方法来解决。

在这种方法中,我们将定义一个 dp 数组,其中 dp[i] 表示到达第 i 个格子时能得到的最大得分。我们将利用步长限制 k,从前 k 个可能的格子中选择最大得分的路径来更新 dp[i]。

解题步骤:

  1. 创建一个数组 dp,大小为 n(格子数量),初始化 dp[0] = score[0](因为游戏从第一个格子开始)。
  2. 对于 dp[i](i从1到n-1),计算从 max(0, i-k) 到 i-1(即前k个可能的格子)中能得到的最大得分加上当前格子的得分 score[i]。
  3. 最终,dp[n-1] 将包含到达最后一个格子时的最大得分。

五、Java算法源码

public class Test05 {/*** 每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7],* 从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 读取格子数量int[] score = new int[n];for (int i = 0; i < n; i++) {score[i] = scanner.nextInt(); // 读取每个格子的得分}int k = scanner.nextInt(); // 读取最大步长System.out.println(maxScore(n, score, k)); // 输出最大得分}public static int maxScore(int n, int[] score, int k) {if (n == 0) return 0;int[] dp = new int[n];dp[0] = score[0]; // 从第一个格子开始,初始化第一个格子的得分// 动态规划计算到达每个格子的最大得分for (int i = 1; i < n; i++) {int maxPrevScore = Integer.MIN_VALUE; // 初始化为极小值,寻找最大的得分// 计算能跳到当前格子i的前k个格子的最大得分for (int j = 1; j <= k; j++) {if (i - j >= 0) {maxPrevScore = Math.max(maxPrevScore, dp[i - j]);}}// 更新到达当前格子的最大得分dp[i] = score[i] + (maxPrevScore != Integer.MIN_VALUE ? maxPrevScore : 0);}// 最后一个格子的得分就是答案return dp[n - 1];}
}

通过动态规划方法计算了在给定步长限制下跳格子游戏的最大得分。通过逐一考虑每个可能的前置位置并选择最优的得分累加方式,确保了每一步都是基于之前得到的最佳结果。这种方法有效地解决了问题,即使在面对较大的 n 和 k 时也能高效运行。

六、效果展示

1、输入

6
1 -1 -6 7 -17 7
2

2、输出

14

3、说明

输出最大得分数,小明从起点score[0]开始跳,第一次跳score[1],第二次跳到score[3],第三次跳到score[5],因此得到的最大的得分是score[0] + score[1] + score[3] + score[5] = 14

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.mrgr.cn/p/73521037

相关文章

SpringBoot 打包所有依赖

SpringBoot 项目打包的时候可以通过插件 spring-boot-maven-plugin 来 repackage 项目,使得打的包中包含所有依赖,可以直接运行。例如: <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin&…

简单解决version GLIBC_2.34 not found,version GLIBC_2.25 not found

简单解决version GLIBC_2.34 not found,version GLIBC_2.25 not found 无需手动下载安装包编译 前言 很多博客都是要手动下载安装包进行编译升级,但这样很容易导致系统崩溃,本博文提供一个简单的方法,参考自博客1,博客2. 检查版本 strings /usr/lib64/libc.so.6 |grep GLI…

敏捷之Scrum开发

目录 一、什么是 Scrum 1.1 Scrum 的定义 二、Scrum 迭代开发过程 2.1 迭代开发过程说明 2.1.1 开发方法 2.1.1.1 增量模型 2.1.1.1.1 定义 2.1.1.1.2 模型方法说明 2.1.1.2 迭代模型 2.1.1.2.1 定义 2.1.1.2.2 模型方法说明 2.1.2 迭代过程 2.1.2.1 产品需求Produ…

简单解决version `GLIBC_2

简单解决version GLIBC_2.34 not found,version GLIBC_2.25 not found 无需手动下载安装包编译 前言 很多博客都是要手动下载安装包进行编译升级,但这样很容易导致系统崩溃,本博文提供一个简单的方法,参考自博客1,博客2. 检查版本 strings /usr/lib64/libc.so.6 |grep GLI…

HTML:认识HTML及基本语法

目录 1. HTML介绍 2. 关于软件选择和安装 3. HTML的基本语法 1. HTML介绍 HyperText Markup Language 简称HTML&#xff0c;意为&#xff1a;超文本标记语言 超文本&#xff1a;是指页面内可以包含的图片&#xff0c;链接&#xff0c;声音&#xff0c;视频等内容 标记&am…

初三奥赛模拟测试5

初三奥赛模拟测试5点击查看快读快写代码 #include <cstdio>using namespace std; // orz laofudasuan // modifiednamespace io {const int SIZE = (1 << 21) + 1;char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = oS + SIZE - 1, c, qu[55]; int f, qr;…

栈_单向链表

利用单向链表设计一个栈,实现“后进先出”的功能 ​ 栈内存自顶向下进行递增,其实栈和顺序表以及链式表都一样,都属于线性结构,存储的数据的逻辑关系也是一对一的。 ​ 栈的一端是封闭的,数据的插入与删除只能在栈的另一端进行,也就是栈遵循“*后进先出*”的原则。也被成…

【国产NI替代】NI-9219 100 S/s/ch,4通道C系列通用模拟输入模块

100 S/s/ch&#xff0c;4通道C系列通用模拟输入模块 NI-9219专为多功能测试而设计。NI-9219可用于测量来自多种传感器&#xff08;如应变计&#xff0c;电阻温度检测器(RTD)&#xff0c;热电偶&#xff0c;测压元件和其他有源传感器等&#xff09;的信号&#xff0c;以及制作1…

VScode 无法连接云服务器

试了很多方法&#xff0c;比如更换VScode版本&#xff0c;卸载重装&#xff0c;删除配置文件 重启电脑&#xff0c;都无法成功。最后重置电脑后才连接上&#xff0c;但是重启服务器后又出现该问题。 方法一&#xff1a;修改环境 方法二&#xff1a;把vscode卸载干净重下

SQL Sever无法连接服务器

SQL Sever无法连接服务器&#xff0c;报错证书链是由不受信任的颁发机构颁发的 解决方法&#xff1a;不用ssl方式连接 1、点击弹框中按钮“选项” 2、连接安全加密选择可选 3、不勾选“信任服务器证书” 4、点击“连接”&#xff0c;可连接成功

vue 脚手架 创建vue3项目

创建项目 命令&#xff1a;vue create vue-element-plus 选择配置模式&#xff1a;手动选择模式 (上下键回车) 选择配置&#xff08;上下键空格回车&#xff09; 选择代码规范、规则检查和格式化方式: 选择语法检查方式 lint on save (保存就检查) 代码文件中有代码不符合 l…

【排课小工具】面向对象分析探索领域模型

用户向系统中输入课表模板、课程信息以及教师责任信息,系统以某种格式输出每个班级的课表。该用例中的主要参与者包括用户以及系统,除了上述两个主要参与者外,我们从该用例中抽取出可能有价值的名词:课表模板、课程、教师职责、班级以及课表。现在我们只知道下面图示的关系…

【Qt 专栏】Qt Creator 的 git 配置 上传到gitee

1.进入到Qt项目文件夹内,打开 “Git Bash Here” 2.初始化,在“Git Bash Here”中输入 git init 3.加入所有文件,在“Git Bash Here”中输入 git add . (需要注意,git add 后面还有一个点) 4.添加备注,git commit -m "备份" 5.推送本地仓库到gitee(需要事…

前端发起网络请求的几种常见方式(XMLHttpRequest、FetchApi、jQueryAjax、Axios)

摘要 前端发起网络请求的几种常见方式包括&#xff1a; XMLHttpRequest (XHR)&#xff1a; 这是最传统和最常见的方式之一。它允许客户端与服务器进行异步通信。XHR API 提供了一个在后台发送 HTTP 请求和接收响应的机制&#xff0c;使得页面能够在不刷新的情况下更新部分内容…

数字旅游:通过科技赋能,创新旅游服务模式,提供智能化、个性化的旅游服务,满足游客多元化、个性化的旅游需求

目录 一、数字旅游的概念与内涵 二、科技赋能数字旅游的创新实践 1、大数据技术的应用 2、人工智能技术的应用 3、物联网技术的应用 4、云计算技术的应用 三、智能化、个性化旅游服务的实现路径 1、提升旅游服务的智能化水平 2、实现旅游服务的个性化定制 四、数字旅…

报错“Please indicate a valid Swagger or OpenAPI version field”

报错“Please indicate a valid Swagger or OpenAPI version field” 报错信息Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.0.n (for example, openapi: 3.0.0). 原因…

安卓获取SHA

1&#xff1a;安卓通过签名key获取SHA 方式有两种&#xff0c; 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了&#xff0c;直接利用eclipse 走打包流程&#xff0c;再打包的时候选择相应的签名&#xff0c;那么在当前面板的下面便会出现签名的相关信息。 2、…

【C++】封装哈希表 unordered_map和unordered_set容器

目录​​​​​​​ 一、unordered系列关联式容器 1、unordered_map 2、unordered_map的接口 3、unordered_set 二、哈希表的改造 三、哈希表的迭代器 1、const 迭代器 2、 operator 3、begin()/end() ​ 4、实现map[]运算符重载 四、封装 unordered_map 和 unordered_se…

visual studio2022,开发CMake项目添加rabbitmq库,连接到远程计算机并进行开发于调试

1.打开visual studio installer 。安装“用于 Windows 的 C CMake 工具” 2.新建CMake项目 3.点击VS的“工具”—>"选项“—>“跨平台”—>”连接管理器“,添加远程计算机。用来将VS编辑的代码传到服务器进行编译–连接—运行&#xff08;调试&#xff09;。 …

深度学习从入门到精通——词向量介绍及应用

词向量介绍 词向量&#xff08;Word embedding&#xff09;&#xff0c;即把词语表示成实数向量。“好”的词向量能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能&#xff0c;例如语法分析和情感分析。词向量与词嵌入技术的提出是为了解决onehot的缺陷。它把…