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

在这里插入图片描述

华为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.mzph.cn/pingmian/3806.shtml

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

相关文章

Taro +vue3 中实现全局颜色css变量的设置和使用

当我们现在需要弄一个随时修改的页面颜色主题色 我们可以随时修改 我使用的是 Taro 框架 一般有一个app.less 文件 我们在这个里面 设置一个root 全局样式 :root {--primary-color: #028fd4;--secondary-color: #028fd6;/* 添加其他颜色变量 */ } 这样在全局我们就可以使用这…

汽车信息安全--如何理解TrustZone(2)

目录 1.概述 2 如何切换安全状态 3 TrustZone里实现了什么功能&#xff1f; 4. 与HSM的比较 1.概述 汽车信息安全--如何理解TrustZone(1)-CSDN博客讲解了什么是Trustzone&#xff0c;下面我们继续讲解与HSM的区别。 2 如何切换安全状态 在引入安全扩展后&#xff0c;Arm…

OpenHarmony硬件合成方案解析

本文档主要讲解在OpenHarmony中&#xff0c;硬件合成适配的方法及原理说明。 环境说明&#xff1a; OHOS版本&#xff1a;3.1-Release及以上 一、背景介绍 1.1 什么是合成 要理解什么是合成&#xff0c;合成做了什么&#xff1f;我们先通过分解设置界面来回答这个问题: 在…

MySQL中的Performance Schema是什么?

MySQL中的Performance Schema是什么&#xff1f; Performance Schema 是 MySQL 的一个特性&#xff0c;主要用于监控 MySQL 服务器在运行时的性能和资源使用情况。它首次引入于 MySQL 5.5 版本&#xff0c;并在后续版本中得到增强。Performance Schema 提供了一种方式来收集数…

base64算法

1 介绍 将二进制数据编码为文本字符串的算法 理解&#xff1a;把一个能看懂的明文变成一个看不懂的密文数据统称为加密 2 使用 A 在浏览器控制台使用 加密 window.btoa(加密的数据) 解密 window.atob(MTIzNDQ) B 在VSconde中使用 加密 解密

机器学习-保险花销预测笔记+代码

读取数据 import numpy as np import pandas as pddatapd.read_csv(rD:\人工智能\python视频\机器学习\5--机器学习-线性回归\5--Lasso回归_Ridge回归_多项式回归\insurance.csv,sep,) data.head(n6) EDA 数据探索 import matplotlib.pyplot as plt %matplotlib inlineplt.hi…

STM32之串口中断接收丢失数据

五六年没搞STM32了&#xff0c;这个项目一切都挺顺利&#xff0c;万万没想到被串口接收中断恶心到了。遇到的问题很奇怪 HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], LCD_UART_LEN); 这个代码中 LCD_UART_LEN1的时候&#xff0c;接收过来的数据&#xff0c;数…

MySQL查询JSON字符串

MySQL版本&#xff1a;8.0.27 表结构及数据 /*Navicat Premium Data TransferSource Server : LocalSource Server Type : MySQLSource Server Version : 80027 (8.0.27)Source Host : 127.0.0.1:3306Source Schema : mumangguoTarget Server T…

如何用Python实现智能客服问答系统

随着人工智能技术的不断发展&#xff0c;机器人客服与聊天系统成为了热门话题。Python作为一种简单易学、功能强大的编程语言&#xff0c;在机器人客服与聊天系统的开发中具有广泛应用。 本文将介绍如何使用Python实现机器人客服与聊天系统&#xff0c;包括实现方式、代码示例和…

可能内存溢出的高级排序算法-归并排序

归并排序 归并排序在经典递归实现中需要的额外空间相对较多。这是因为在归并排序的过程中&#xff0c;需要与原始数组大小相同的额外空间来存储临时合并的数组。所以&#xff0c;其空间复杂度为O(n)&#xff0c;其中n表示待排序数组的长度。在递归过程中&#xff0c;需要创建临…

LeetCode 0039.组合总和:回溯 + 剪枝

【LetMeFly】39.组合总和&#xff1a;回溯 剪枝 力扣题目链接&#xff1a;https://leetcode.cn/problems/combination-sum/ 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合…

[NSSCTF]prize_p5

前言 之前就学过反序列化的字符串逃逸 但是没怎么做题 补一下窟窿 题目 <?phperror_reporting(0);class catalogue{public $class;public $data;public function __construct(){$this->class "error";$this->data "hacker";}public functi…

Ali-Sentinel-链路控制

归档 GitHub: Ali-Sentinel-链路控制 链结构 参考&#xff1a;入口控制-处理链 具体实现 NodeSelectorSlot 给上下文设置统计节点 com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot Spi(isSingleton false, order Constants.ORDER_NODE_SELECTOR_SLOT)…

2023-2024年度广东省职业院校学生技能大赛“ 网络系统管理”赛项竞赛规程(正式稿)

2023-2024年度广东省职业院校学生技能大赛“ 网络系统管理”赛项竞赛规程&#xff08;正式稿&#xff09; 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx…

Python 中的下划线变量

Python 中的下划线变量 _name: 这是一种约定俗成的方式&#xff0c;表示这是一个私有变量&#xff0c;意味着它应该在类的内部使用&#xff0c;而不应该直接从外部访问。但实际上&#xff0c;Python并没有严格的私有化机制&#xff0c;这只是一种约定&#xff0c;因为外部仍然可…

Nginx高级配置与重写规则详解:从入门到实践

摘要: 本文将深入探讨Nginx的高级配置与重写规则,通过实际案例讲解如何优化Nginx的配置,实现URL重写、负载均衡、缓存优化等功能。文章旨在帮助读者更好地理解和应用Nginx,提升网站性能和用户体验。 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理服务器,也是IMAP/POP…

代码随想录训练营day43

第九章 动态规划 part05 1.LeetCode. 最后一块石头的重量 II 1.1题目链接&#xff1a;1049.最后一块石头的重量II 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;B站卡哥视频 1.2思路&#xff1a;本题其实就是尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下…

【嵌入式DIY实例】-RFID门禁系统

DIY RFID门禁系统 文章目录 DIY RFID门禁系统1、RFID RC522介绍2、硬件准备与接线2、代码实现RFID(Radio Frequency Identification)简称为射频识别。 在本文中,将演示如何使用这项技术来实现门安全系统。 1、RFID RC522介绍 RFID rc522是一种基于射频的模块,其感应范围接…

Java中的多线程编程与并发控制

Java中的多线程编程与并发控制 一、引言 随着计算机硬件技术的不断发展&#xff0c;多核处理器已经成为现代计算机系统的标配。在这样的背景下&#xff0c;多线程编程与并发控制成为了Java开发中不可或缺的一部分。多线程编程能够充分利用多核处理器的并行计算能力&#xff0…

嵌入式软件工程师要会画板子吗?

答案:要 作为嵌入式软件工程师,本来就经常和硬件打交道。调试各种协议也要看波形,用示波器什么的。软件玩多了也会腻,可以玩玩硬件,自己从 0 做出一个东西的感觉是不一样的。职业生涯那么长,多尝试一些总是好的,一个软硬件都懂的人,才能更好的带项目。 博主玩过很多板…