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

news2025/1/20 12:08:03

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 具体规则如下:
      • 具体步骤如下:
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

一、题目描述

给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,

请计算所有轮结束后其可以获得的最高总分数。

选择规则如下:

  1. 在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数;
  2. 选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0;
  3. 选手的初始总分数为0,且必须依次参加每一轮。

二、输入描述

第一行为一个小写逗号分割的字符串,表示n轮的牌面分数,1<= n <=20。

分数值为整数,-100 <= 分数值 <= 100。

不考虑格式问题。

三、输出描述

所有轮结束后选手获得的最高总分数。

四、解题思路

题目要求计算选手在每一轮选择牌面后能获得的最高总分数。选手可以选择获取当前轮的牌面分数,也可以选择跳过当前轮。

具体规则如下:

  1. 如果选手选择获取当前轮的牌面分数,则将当前轮的牌面分数加到总分数上,成为新的总分数;
  2. 如果选手选择跳过当前轮,则将当前总分数还原为3轮前的总分数(即上上轮的总分数),如果当前轮次小于等于3,则总分数置为0;
  3. 选手的初始总分数为0,且必须依次参加每一轮。

根据题目描述,我们可以使用动态规划的思想来解决问题。

具体步骤如下:

  1. 读取输入的牌面分数字符串,使用逗号分割得到每一轮的牌面分数数组;
  2. 创建一个整型数组 arr,将牌面分数依次存储到数组中;
  3. 创建一个整型列表 list,用于存储每一轮结束后选手获得的最高总分数。初始化列表的第一个元素为初始总分数,即 list[0] = arr[0](如果第一轮的牌面分数小于等于0,则初始总分数为0);
  4. 使用循环从第二轮开始计算每一轮结束后选手获得的最高总分数,从 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 和跳过当前轮后的总分数,取较大值作为当前轮结束后的最高总分数。
  5. 输出列表中的最后一个元素 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在线答疑。

在这里插入图片描述

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

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

相关文章

【Golang】go条件编译

交叉编译只是为了能在一个平台上编译出其他平台可运行的程序&#xff0c;Go 作为一个跨平台的语言&#xff0c;它提供的类库势必也是跨平台的&#xff0c;比如说程序的系统调用相关的功能&#xff0c;能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译…

亚马逊重拳打击虚假评论,不想被关联影响的看这里(纯干货)

近年来&#xff0c;亚马逊投入了大量资源来确保平台上评论的真实性&#xff0c;提升客户的实际体验&#xff0c;如通过机器学习模型和专家调查员&#xff0c;在评论发布之前分析其中的欺诈和可疑内容。同时&#xff0c;亚马逊持续起诉刷单机构&#xff0c;严厉打击平台上存在的…

【真人语音】讯飞星火个人声音训练及导出下载工具V0.2.exe

【项目背景】 小编一直在尝试着短视频技术&#xff0c;在读文案的时候经常会读错&#xff1b;所以&#xff0c;只能用微软或者剪映的文本转语音软件。 很早之前在Github上也看到过真人人声训练的开源代码&#xff0c;尝试过一番之后&#xff0c;也是以失败告终&#xff1b;就…

IMX989 35mm模组首发,厚度惊人,努比亚能吃到第一波红利吗?

根据数码闲聊站的曝光内容&#xff0c;努比亚即将推出一款工程机&#xff0c;据称将搭载索尼IMX989 35mm镜头。从曝光图来看&#xff0c;该工程机的镜头模组采用了圆形设计&#xff0c;相比传统手机要更厚一些。最引人注目的是该手机预计将搭载对焦环&#xff0c;这使得该工程机…

.ssh文件夹下缺失known_hosts文件

.ssh文件夹下缺失known_hosts文件 先确认工蜂或github 添加了git生成的密钥 然后 桌面打开git bash 1、执行ssh -T gitgitlab.com 2、输入yes

Vue2-初识路由、路由分类、路由的基本使用、嵌套(多级)路由、路由的query参数、路由的params参数、路由的props配置

&#x1f954;&#xff1a;有的山长满荆棘&#xff0c;有的山全是野兽&#xff0c;所以你应该是自己的那座山 更多Vue知识请点击——Vue.js VUE2-Day12 路由简介1、什么是SPA&#xff1f;2、什么是路由&#xff1f;3、路由的分类①前端路由②后端路由 路由的基本使用1、编写rou…

spark 部署

下载spark 安装包 spark官网下载 pre-built with user-provided 会支持更多的hadoop&#xff0c;已经安装了hadoop和java环境的选这个比较好 wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz安装 解压 tar -xvf spark-3.3.2-bin-hadoop3.tgz …

【java】【项目实战】[外卖八]产品展示、购物车、下单开发

目录 一、导入用户地址簿相关功能代码 1 需求分析 2 数据模型 3 导入功能代码 3.1 实体AddressBook 3.2 Mapper接口AddressBookMapper 3.3 业务接口层AddressBookService 3.4 业务接口实现类AddressBookServiceImpl 3.5 控制层AddressBookController 4 功能测试 二、…

读SQL学习指南(第3版)笔记06_连接和集合

1. 连接 1.1. 笛卡儿积 1.1.1. 交叉连接&#xff08;cross join&#xff09; 1.1.2. 查询并没有指定两个数据表应该如何连接&#xff0c;数据库服务器就生成了笛卡儿积 1.1.2.1. 两个数据表的所有排列组合 1.1.3. 很少会用到&#xff08;至少不会特意用到&#xff09; 1.…

NameNode 故障无法重新启动解决方法

文章目录 NameNode 进程挂掉NameNode 进程挂掉且数据丢失 NameNode 进程挂掉 如果只是单纯的进程挂掉了&#xff0c;可以直接使用下列命令进行重启&#xff1a; hdfs --daemon start namenode示例&#xff1a; NameNode 进程挂掉且数据丢失 这种情况就不可以直接通过重启解决…

com.mysql.jdbc.PacketTooBigException: Packet for query is too large(windows)

使用mysql查询数据的时候报错&#xff1a; Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1078 > 1024). You can change this value on the server by setting the max_allowed_packet variable. 这是因为mysql的server默认接受数据…

java项目mysql转postgresql

特殊函数 &#xff1a; mysql&#xff1a; find_in_set(?, ancestors) postgresql&#xff1a; ? ANY (string_to_array(ancestors,,)) mysql&#xff1a; date_format(t1.oper_time, %Y-%m-%d) postgresql&#xff1a; rksj::date to_char(inDate,YYYY-MM-DD) mysql&am…

基于北斗RTK+UWB矿山智能人车定位系统

露天矿山开采环境复杂&#xff0c;作业危险系数高&#xff0c;安全生产隐患多。智能人车定位技术在保障露天矿山安全生产方面具有重要作用。通过实时监测人员和车辆的位置和行动&#xff0c;可以有效防止事故发生、提高工作效率和管理水平。 华安联大以露天矿山安全生产为出发…

Ubuntu 下安装Qt5.12.12无法输入中文解决方法

Ubuntu 下安装Qt5.12.12无法输入中文解决方法 一&#xff0c;环境&#xff1a; &#xff08;1&#xff09;VMware Workstation 15 Pro &#xff08;2&#xff09;Ubuntu 20.04 &#xff08;3&#xff09;Qt 5.12.12 64bits &#xff08;4&#xff09;Qt Creator 5.0.2 &#…

基于 OV5640 摄像头理论知识讲解-成像和采样原理

基于OV2640/ OV5640 的图像采集显示系统系列文章目录&#xff1a; &#xff08;1&#xff09;基于 OV5640 摄像头理论知识讲解-成像和采样原理 &#xff08;2&#xff09;基于 OV5640 摄像头理论知识讲解-数字接口和控制接口 &#xff08;3&#xff09;基于 OV5640 摄像头理论知…

Qt应用开发(基础篇)——字体选择器 QFontDialog

一、前言 QFontDialog类继承于QDialog&#xff0c;是一个设计用来选择字体的对话框部件。 对话框窗口QDialog QFontDialog字体选择对话框&#xff0c;设计用来让用户选择某一种字体&#xff0c;一般用于文本编辑窗口、标签显示和一些需要文本输入的场景。你可以直接使用静态函数…

2、DVWA——命令注入

文章目录 一、命令注入1.1 概述1.2 判断命令注入流程 二、low2.1 通关思路2.2.源码分析 三、Medium3.1 通关思路3.2 源码分析 四、high4.1 通关思路4.2 源码分析 五、impossible六、总结 一、命令注入 1.1 概述 命令注入的目标是通过易受攻击的应用程序在主机操作系统上执行任…

『赠书活动 | 第十八期』《深入浅出SSD:固态存储核心技术、原理与实战》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十八期』 本期书籍&#xff1a;《深入浅出SSD&#xff1a;固态存储核心技术、原理与实战》 赠书规则&#xff1a;评论区&#xff1a;点赞&…

【力扣每日一题】2023.8.29 带因子的二叉树

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一些元素&#xff0c;让我们用这些元素连接形成特定的二叉树&#xff0c;每种元素可以使用任意次数&#xff0c;形成的二叉树要…