跳格子3 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

小明和朋友们一起玩跳格子游戏,每个格子上有特定的分数,score[] = [1 -1 -6 7 -17 7],

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

注:

  • 格子的总长度和步长的区间在 [1, 100000];
  • 每个格子的分数在[-10000, 10000]区间中;

输入描述

6 // 第一行输入总的格子数量

1 -1 -6 7 -17 7 // 第二行输入每个格子的分数score[]

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

输出描述

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

示例1

输入:
6
1 -1 -6 7 -17 7
2输出:
14

题解

题目类型: 动态规划问题,使用优先级队列来优化。

解题思路: 动态规划问题,定义状态和状态转移方程。使用优先级队列(大根堆)来维护前面格子已经获得的最大得分,保证每次选择最大得分的格子进行跳跃。

代码大致描述:

  • 输入格子数量 n,每个格子的分数 scores,以及最大跳步长 k。
  • 初始化优先级队列 pq,用于存储 (得分, 位置) 对,根据得分从大到小排序。
  • 初始化 dp 数组,dp[i] 表示跳到位置 i 时可以获得的最大得分。
  • 遍历格子,计算每个位置的最大得分,并使用优先级队列维护前面格子的最大得分信息。
  • 输出 dp 数组的最后一个元素,即到达终点时的最大得分。

时间复杂度: O(n log n),其中 n 为格子的数量。因为在每一步都需要操作优先级队列,插入和删除的时间复杂度为 O(log n)。

空间复杂度: O(n),用于存储 dp 数组和优先级队列。

Java

import java.util.PriorityQueue;
import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] scores = new int[n];for (int i = 0; i < n; i++) scores[i] = in.nextInt();// 最大步长int k = in.nextInt();// 优先级队列用于维护前面格子已经获得的最大得分// 存储格式 {得分, 位置}PriorityQueue<int[]> pq = new PriorityQueue<>((a1, a2) -> a2[0] - a1[0]);// dp[i] 表示跳到 i 可以能得到的最大得分int[] dp = new int[n];dp[0] = scores[0];pq.offer(new int[]{dp[0], 0});// 遍历数组,计算每个位置的最大得分for (int i = 1; i < n; i++) {// 不能从  pq.peek()[1] 步跳到 i,因此抛弃while (!pq.isEmpty() && i - pq.peek()[1] > k) pq.poll();// 计算当前位置的最大得分dp[i] = pq.peek()[0] + scores[i];pq.offer(new int[]{dp[i], i});}System.out.println(dp[n - 1]);}
}

Python

import heapq# 主函数
def main():# 输入 nn = int(input())# 输入各个位置的得分scores = list(map(int, input().split()))# 输入最大步长 kk = int(input())# 使用大根堆来存储 (得分, 位置) 对pq = []# dp[i] 表示跳到 i 可以能得到的最大得分dp = [0] * ndp[0] = scores[0]# 将第一个位置的得分和位置加入最大堆heapq.heappush(pq, (-dp[0], 0))# 遍历数组,计算每个位置的最大得分for i in range(1, n):# 不能从 pq[0][1] 步跳到 i,因此抛弃while pq and i - pq[0][1] > k:heapq.heappop(pq)# 计算当前位置的最大得分dp[i] = -pq[0][0] + scores[i]# 将当前位置的得分和位置加入最大堆heapq.heappush(pq, (-(dp[i]), i))# 输出最后一个位置的最大得分print(dp[n - 1])# 调用主函数
if __name__ == "__main__":main()

C++

#include <bits/stdc++.h>
using namespace std;int main(){int n, k;cin >> n;vector<int> scores(n);for(size_t i = 0; i < n; i++) cin >> scores[i];// 最大步长cin >> k;priority_queue<pair<int, int>> pq;// dp[i] 表示跳到 i 可以能得到的最大得分vector<int> dp(n, 0);dp[0] = scores[0];pq.push({dp[0], 0});for(size_t i = 1; i < n; i++){// 不能从  pq.top().second 步跳到 i,因此抛弃while(!pq.empty() && i - pq.top().second > k) pq.pop();dp[i] = pq.top().first + scores[i];pq.push({dp[i], i});}cout << dp[n - 1] << endl;return 0;
}    

相关练习题

题号题目难易
LeetCode 4545. 跳跃游戏 II中等
LeetCode 13061306. 跳跃游戏 III中等
LeetCode 16961696. 跳跃游戏 VI中等

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

应急响应实战笔记03权限维持篇(2)

关键词&#xff1a;Windows系统后门、权限维持 在获取服务器权限后&#xff0c;通常会用一些后门技术来维持服务器权限&#xff0c;服务器一旦被植入后门&#xff0c;攻击者便如入无人之境。本文将对常见的window服务端自启动后门技术进行解析&#xff0c;知己知彼方能杜绝后门…

【计算机网络】数据链路层|封装成帧|透明传输|差错检测|PPP协议|CSMA/CD协议

目录 一、思维导图 ​ 二、数据链路层功能概述 1.数据链路层概述 2.数据链路层功能概述——封装成帧 3.数据链路层功能概述——透明传输 4.数据链路层功能概述——差错检测 三、数据链路层重要协议 1.数据链路层重要协议&#xff1a;PPP协议 2.数据链路层重要协议&#x…

Spring 类型转换、数值绑定与验证(二)—PropertyEditor与Conversion

Spring 中&#xff0c;属性类型转换是在将数值绑定到目标对象时完成的。例如在创建ApplicationContext 容器时&#xff0c;将XML配置的bean 转换成Java类型对象&#xff0c;主要是借助了PropertyEditor类&#xff0c;而在Spring MVC 的Controller的请求参数转化为特定类型时&am…

论文阅读《Sylph: A Hypernetwork Framework for Incremental Few-shot Object Detection》

论文地址&#xff1a;https://arxiv.org/abs/2203.13903 代码地址&#xff1a;https://github.com/facebookresearch/sylph-few-shot-detection 目录 1、存在的问题2、算法简介3、算法细节3.1、基础检测器3.2、小样本超网络3.2.1、支持集特征提取3.2.2、代码预测3.2.3、代码聚合…

c++服务器开源项目Tinywebserver运行

c服务器开源项目Tinywebserver运行 一、Tinywebserver介绍二、环境搭建三、构建数据库四、编译Tinywebserver五、查看效果 Tinywebserver是github上一个十分优秀的开源项目&#xff0c;帮助初学者学习如何搭建一个服务器。 本文讲述如何在使用mysql跟该项目进行连接并将项目运行…

中科大计网学习记录笔记(十三):UDP 套接字编程 | 传输层概述和传输层的服务

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

轻松掌握opencv的8种图像变换

文章目录 opencv的8种图像变换1. 图像放大、缩小2. 图像平移3. 图像旋转4. 图像仿射变换5. 图像裁剪6. 图像的位运算&#xff08;AND, OR, XOR&#xff09;7. 图像的分离和融合8. 图像的颜色空间 opencv的8种图像变换 1. 图像放大、缩小 我们先看下原图 import cv2 import ma…

Stable Diffusion 模型分享:A-Zovya RPG Artist Tools(RPG 大师工具箱)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 A-Zovya RPG Artist Tools 模型是一个针对 RPG 训练的一个模型&#xff0c;可以生成一些 R…

用友U8库存展望数据显示错误

1、库存展望显示有订单在途。 2、双击查看明细&#xff0c;显示某个采购订单显示有预计入库量。 3、查询该采购订单&#xff0c;发现已入库完成未退货&#xff0c;确定为数据异常。 修改采购订单表体的iReceivedQTY(累计到货数量)字段后&#xff0c;恢复正常。 UPDATE dbo.PO_…

这6款实用的AI写作软件你值得拥有

在当今信息爆炸的时代&#xff0c;人们对于高效、便捷的写作工具需求越来越迫切。AI写作软件应运而生&#xff0c;为广大写作者提供了更加智能、高效的写作方式。在国内&#xff0c;有许多优秀的AI写作软件&#xff0c;下面就为大家介绍6款实用的AI写作软件&#xff0c;让你的写…

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的&#xff0c;遵循一定格式&#xff08;通常包含时间戳&#xff09;的文本数据。 通常日志由服务器生成&#xff0c;输出到不同的文件中&#xff0c;一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…