华为OD机试 - 玩牌高手 - 动态规划(Java 2023 B卷 100分)

目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 具体规则如下:
- 具体步骤如下:
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
一、题目描述
给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,
请计算所有轮结束后其可以获得的最高总分数。
选择规则如下:
- 在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数;
- 选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0;
- 选手的初始总分数为0,且必须依次参加每一轮。
二、输入描述
第一行为一个小写逗号分割的字符串,表示n轮的牌面分数,1<= n <=20。
分数值为整数,-100 <= 分数值 <= 100。
不考虑格式问题。
三、输出描述
所有轮结束后选手获得的最高总分数。
四、解题思路
题目要求计算选手在每一轮选择牌面后能获得的最高总分数。选手可以选择获取当前轮的牌面分数,也可以选择跳过当前轮。
具体规则如下:
- 如果选手选择获取当前轮的牌面分数,则将当前轮的牌面分数加到总分数上,成为新的总分数;
- 如果选手选择跳过当前轮,则将当前总分数还原为3轮前的总分数(即上上轮的总分数),如果当前轮次小于等于3,则总分数置为0;
- 选手的初始总分数为0,且必须依次参加每一轮。
根据题目描述,我们可以使用动态规划的思想来解决问题。
具体步骤如下:
- 读取输入的牌面分数字符串,使用逗号分割得到每一轮的牌面分数数组;
- 创建一个整型数组 arr,将牌面分数依次存储到数组中;
- 创建一个整型列表 list,用于存储每一轮结束后选手获得的最高总分数。初始化列表的第一个元素为初始总分数,即 list[0] = arr[0](如果第一轮的牌面分数小于等于0,则初始总分数为0);
- 使用循环从第二轮开始计算每一轮结束后选手获得的最高总分数,从 i = 1 开始迭代到 i = n-1:
- 计算当前轮结束后的总分数 count = list[i-1] + arr[i],即当前轮的总分数为上一轮的总分数加上当前轮的牌面分数。
- 如果当前轮次 i 小于等于3,则将 count 和 0 中的较大值添加到列表中,即 list.add(Math.max(count, 0))。这是因为如果当前轮次小于等于3,则选手无法回到上上轮,因此总分数应该置为0。
- 如果当前轮次 i 大于3,则将 count 和上上轮的总分数 list[i-3] 中的较大值添加到列表中,即 list.add(count > list[i-3] ? count : list[i-3])。这是因为选手可以选择跳过当前轮,所以要比较 count 和跳过当前轮后的总分数,取较大值作为当前轮结束后的最高总分数。
- 输出列表中的最后一个元素 list[n-1],即所有轮结束后选手获得的最高总分数。
五、Java算法源码
public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 每一轮的牌面分数数组int[] arr = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();int a = arr.length;// 存储每一轮结束后选手获得的最高总分数List<Integer> list = new ArrayList<>();// 初始化列表的第一个元素为初始总分数,即 list[0] = arr[0]// 如果第一轮的牌面分数小于等于0,则初始总分数为0;if (arr[0] <= 0) {list.add(0);} else {list.add(arr[0]);}// 使用循环从第二轮开始计算每一轮结束后选手获得的最高总分数for (int i = 1; i < a; i++) {int count = list.get(i - 1) + arr[i];if (i < 3) {list.add(Math.max(count, 0));} else {// 将 count 和上上轮的总分数 list[i-3] 中的较大值添加到列表中list.add(count > list.get(i - 3) ? count : list.get(i - 3));}}System.out.println(list.get(a - 1));
}
六、效果展示
1、输入
2,-3,-7,4,3,4,-2,-7
2、输出
7
3、说明
核心思想:选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数;若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0;
- 2;
- 2 + (-3) = -1,前三轮跳过的话总分置为0;
- 从第四个开始累加,4 + 3 + 4 = 11;
- 再加-2 = 9,如果跳过,还原为3轮前的总分数4,9 大于4,故不跳过;
- 再加-7 = 2,如果跳过,还原为3轮前的总分数7,7大于2,故跳过;
- 输出7;

🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关文章:
华为OD机试 - 玩牌高手 - 动态规划(Java 2023 B卷 100分)
目录 一、题目描述二、输入描述三、输出描述四、解题思路具体规则如下:具体步骤如下: 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 一、题目描述 给定一个长度为n的整型数组࿰…...
【java】【重构二】分模块开发版本锁定以及耦合(打包)实战
目录 一、创建dependencyManagement标签 二、 将需要版本控制的依赖版本进行标签设置 三、将需要版本控制的依赖从各子模块迁移到此处 四、将父模块的依赖版本控制 五、删除子模块的全部版本 1、bocai-web-management模块 2、bocai-utils模块 六、打包 1、确定代码都…...
Excel提高工作效率常用功能
定位快捷键使用 CtrlG或者F5 根据不同类别插入空行 例:以下表,以部门为单位,每个部门后插入空白行 部门姓名出勤基本工资岗位津贴公体加班绩效基数工龄应发合计财务部姓名73115002101710财务部姓名11116006003401502363财务部姓名5271000…...
物联网_00_物理网介绍
1.物联网为什么会出现? 一句话-----追求更高品质的生活, 随着科技大爆炸, 人类当然会越来越追求衣来伸手饭来张口的懒惰高品质生活, 最早的物联网设备可以追溯到19世纪末的"在线可乐售卖机"和"特洛伊咖啡壶"(懒惰的技术人员为了能够实时看到物品的情况而设…...
华为智选SF5,AITO问界的车怎么样
#华为智选 #赛力斯SF5 #aito问界m5 #aito问界m7 #华为汽车 华为的车,后杠焊两点,拉车的时候,拖车钩断了,后杠拉出来了,这质量可以吗?是否应该全部召回?M5,M7是不是也这样?…...
大数据测试用例分析
基于大数据分析,对业务系统产生的日志进行智能分析,能够识别日志中的接口、参数、业务流,并依据分析的结果生成测试用例。 问题与背景 业务复杂 业务系统的复杂性,对测试人员的业务能力提出严格要求,加重测试成本。 …...
Java中的泛型:高效编程的利器
泛型—— 一种可以接收数据类型的数据类型。泛型是Java中的一种参数化类型机制,通过类型参数,可以在类、接口和方法中实现通用的代码。 泛型的引入 泛型(Generics)是 Java 编程语言中引入的一个重要特性,它可以让程序…...
Mysql的關鍵字或者保留字
1.group 不能用group作爲字段名 ### SQL: insert INTO biz_customer_group ( id,customer,group ) VALUES (?,?,?) ON DUPLICATE key update customer VALUES(customer), group VALUES(group) ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your S…...
24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4
Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...
React基础: 项目创建 JSX 基础语法 React基础的组件使用 useState状态 基础样式控制
01 React 文章目录 01 React一、React是什么1、React的优势 二、React开发环境搭建1、创建项目2、运行项目3、项目的目录结构 三、JSX基础1、什么是 JSX代码示例: 2、JSX使用场景2.1代码示例: 3、JSX中实现列表渲染4、JSX - 实现基本的条件渲染5、JSX - …...
力扣每日一题49:字母异位词分组
题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…...
TechSmith Camtasia Studio 23.3.2.49471 Crack
全新的Camtasia 2023.2 Camtasia Studio是专业的屏幕录像和视频编辑的软件套装。软件提供了强大的屏幕录像(Camtasia Recorder)、视频的剪辑和编辑(Camtasia Studio)、视频菜单制作(Camtasia MenuMaker)、视…...
进程【Linux系统编程】
一、先谈硬件——冯诺依曼体系结构 存储器:内存(硬盘是外存) 输入设备:鼠标、键盘、摄像头、话筒、磁盘、网卡…… 输出设备:显示器、播放器硬件、磁盘、网卡…… 输入输出设备是外部设备,简称外设。 中央…...
【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds
【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds math numbers Instructions Write a function that takes an integer minutes and converts it to seconds. Examples convert(5) // 300 convert(3) // 180 convert(2) // 120Notes Don’t forge…...
Django实现音乐网站 ⒇
使用Python Django框架做一个音乐网站, 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…...
C++类对象所占内存空间大小分析
前言 类占内存空间是只类实例化后占用内存空间的大小,类本身是不会占内存空间的。用 sizeof 计算类的大小时,实际上是计算该类实例化后对象的大小。空类占用1字节原因:C要求每个实例在内存中都有一个唯一地址,为了达到这个目的&am…...
绿肥红瘦专栏数据的爬取
前言 要想爬专栏,先得爬用户。要想爬用户,三个header参数挡住了去路:x-zst-81,x-zse-93,x-zse-96,经过搜索x-zse-96,定位到设置该字段的位置: 这个t2是固定的值,t0来自于…...
centos或aws linux部署java应用,环境搭建shell
目录 设置root密码开启密码登录安装docker安装nginx设置nginx自启动nginx配置https配置http集群tcp集群 安装docker设置docker自启动修改docker基础配置创建docker网关docker安装mysql单机版本主从版本 docker安装redis设置密码:不要密码: docker安装rab…...
2023年中国车用冲压模具行业特征、竞争现状及行业市场规模分析[图]
汽车冲压件模具具有尺寸大、型面复杂、精度要求高等特点,属于技术密集型产品。汽车冲压模具能快速精密地把材料直接加工成零件或半成品并通过焊接、铆接、拼装等工艺装配成零部件,冲压模具的设计开发和加工能力对汽车冲压零部件产品总制造成本、质量及性…...
基于Pytorch的CNN手写数字识别
作为深度学习小白,我想把自己学习的过程记录下来,作为实践部分,我会写一个通用框架,并会不断完善这个框架,作为自己的入门学习。因此略过环境搭建和基础知识的步骤,直接从代码实战开始。 一.下载数据集并加…...
保姆级教程:中科蓝讯AB530X蓝牙芯片工程编译全流程拆解(从prebuild到app.dcf)
中科蓝讯AB530X蓝牙芯片工程编译实战手册:从环境搭建到固件生成 第一次接触中科蓝讯AB530X芯片的SDK开发环境时,面对复杂的编译流程和陌生的工具链,不少开发者都会感到无从下手。这份手册将彻底拆解从prebuild预处理到最终生成app.dcf固件的完…...
Vite项目如何优雅地告别IE11?用@vitejs/plugin-legacy搞定浏览器兼容(附browserslist配置详解)
Vite项目如何优雅地告别IE11?用vitejs/plugin-legacy搞定浏览器兼容(附browserslist配置详解) 当现代前端开发已经全面拥抱ES Modules和原生JavaScript特性时,IE11就像一位固执的老朋友,总让我们不得不在构建配置中为它…...
从混淆矩阵到决策曲线:用Matplotlib一步步拆解DCA背后的净获益计算
从混淆矩阵到决策曲线:用Matplotlib拆解DCA的净获益计算 在医疗诊断和风险评估领域,我们常常需要判断一个预测模型是否真正具有临床价值。传统指标如准确率、AUC值虽然能反映模型性能,却无法回答一个关键问题:**使用这个模型做决策…...
NodeMCU PyFlasher:5分钟快速掌握ESP8266固件烧录的终极图形化工具
NodeMCU PyFlasher:5分钟快速掌握ESP8266固件烧录的终极图形化工具 【免费下载链接】nodemcu-pyflasher Self-contained NodeMCU flasher with GUI based on esptool.py and wxPython. 项目地址: https://gitcode.com/gh_mirrors/no/nodemcu-pyflasher NodeM…...
从‘七桥问题’到社交网络推荐:用Python代码和图论解决5个实际问题
从‘七桥问题’到社交网络推荐:用Python代码和图论解决5个实际问题 当18世纪的数学家欧拉站在哥尼斯堡的七座桥前思考如何不重复地走遍所有桥梁时,他可能不会想到,这个看似简单的谜题会开创一个影响深远的数学分支——图论。两个多世纪后的今…...
从一道经典C语言题出发:手把手教你封装gcd和lcm函数,提升代码复用性
从一道经典C语言题出发:手把手教你封装gcd和lcm函数,提升代码复用性 在编程学习的道路上,我们常常会遇到一些看似简单却蕴含深刻编程思想的题目。求最大公约数(GCD)和最小公倍数(LCM)就是这样一…...
CANoe Trace窗口保姆级指南:从报文查看、过滤到数据导出,一次搞定
CANoe Trace窗口实战指南:从数据诊断到问题定位全流程解析 第一次打开CANoe的Trace窗口时,面对满屏跳动的报文数据,大多数工程师都会感到无从下手。这就像突然被扔进一个嘈杂的电子集市,各种信号此起彼伏,而你需要从中…...
R语言新包pm3保姆级教程:三组倾向评分匹配,5分钟搞定SCI论文数据预处理
R语言pm3包实战指南:三组倾向评分匹配的科研加速方案 当你在深夜实验室盯着三组基线不平衡的回顾性数据发愁时,咖啡杯旁堆积的文献可能正在提醒你:距离论文截稿只剩72小时。医学和社会科学研究中,这种场景几乎每天都在重演——直到…...
Phi-4-mini-flash-reasoning参数详解:Temperature 0.3 vs 0.6在解释深度上的差异
Phi-4-mini-flash-reasoning参数详解:Temperature 0.3 vs 0.6在解释深度上的差异 1. 模型概述 Phi-4-mini-flash-reasoning 是一款专注于复杂推理任务的轻量级文本生成模型。与通用大模型不同,它特别擅长处理需要多步推理和结构化分析的场景࿱…...
用74LS00和74LS10芯片,手把手教你做一个三人表决器(附完整电路图与避坑指南)
用74LS00和74LS10芯片搭建三人表决器的实战指南 引言 数字电路设计是电子工程领域的基础技能之一,而表决器电路则是理解组合逻辑电路的经典案例。本文将带你从零开始,使用74LS00和74LS10这两款常见的TTL逻辑芯片,构建一个实用的三人表决器系统…...
