【华为OD题库-083】玩牌高手-Java

news/2024/7/20 16:33:15 标签: 华为od, java, 动态规划

题目

给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,请计算所有轮结束后其可以获得的最高总分数。
选择规则如下:
1.在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数。
2.选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0。
3.选手的初始总分数为0,且必须依次参加每一轮。
输入描述
第一行为一个小写逗号分割的字符串,表示n轮的牌面分数,1<=n <=20。
分数值为整数,-100<=分数值<=100。
不考虑格式问题。
输出描述
所有轮结束后选手获得的最高总分数。
示例1:
输入
1,-5,-6,4,3,6,-2
输出
11
说明
总共有7轮牌面。
第—轮选择该轮牌面,总分数为1。
第二轮不选择该轮牌面,总分数还原为0。
第三轮不选择该轮牌面,总分数还原为0。
第四轮选择该轮牌面,总分数为4。
第五轮选择该轮牌面,总分数为7。
第六轮选择该轮牌面,总分数为13。
第七轮如果不选择该轮牌面,则总分数还原到3轮前分数,即第四轮的总分数4,如果选择该轮牌面,总分数为11,所以选择该轮牌面。
因此,最终的最高总分为11。

思路

动态规划解决,设输入的数据为nums:
定义:dp[i]代表第i轮可得的最高分数
初始化:dp[0]=Math.max(0,nums[0])
递推关系:对于nums中的每一项(i>0),当前项只有选择和不选择两种可能:
选择得分为:dp[i-1]+nums[i]
不选择得分为:dp[i-3](i>3),当i<=3时,得分为:0
本轮得分取两者的较大值。
最终最高分为:dp[nums.length-1]

题解

java">package hwod;

import java.util.Arrays;
import java.util.Scanner;

public class PokerPlay {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] nums = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        System.out.println(pokerPlay(nums));
    }

    private static int pokerPlay(int[] nums) {
        int[] dp = new int[nums.length];
        dp[0] = Math.max(0, nums[0]);
        for (int i = 1; i < nums.length; i++) {
            if(i<3) dp[i] = Math.max(dp[i - 1] + nums[i], 0);
            else dp[i] = Math.max(dp[i - 1] + nums[i], dp[i-3]);
        }
        return dp[nums.length - 1];
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。


http://www.niftyadmin.cn/n/5246923.html

相关文章

系列学习前端之第 4 章:一文精通 JavaScript

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 1、JavaScript 格式 一般放在 html 的 <head> 标签中。type&#xff1a;默认值text/javascript可以不写&#xff0c;不写也是这个值。 <script typ…

Python-滑雪大冒险【附源码】

滑雪大冒险 《滑雪大冒险》是一款充满趣味性和挑战性的休闲竞技游戏&#xff0c;在游戏中&#xff0c;玩家将扮演一位勇敢的滑雪者&#xff0c;在雪山上展示他们的滑雪技巧&#xff0c;游戏采用2D图形界面&#xff0c;以第三人称视角呈现 运行效果&#xff1a;用方向键及方向键…

算能 MilkV Duo开发板实战——opencv-mobile (迷你版opencv库)的移植和应用

前言 OpenCV是一种开源的计算机视觉和机器学习软件库&#xff0c;旨在提供一组通用的计算机视觉工具。它用于图像处理、目标识别、人脸识别、机器学习等领域&#xff0c;广泛应用于计算机视觉任务。 OpenCV-Mobile是OpenCV库的轻量版本&#xff0c;专为移动平台&#xff08;A…

工业物联网网关,实现设备远程监控

​随着工业4.0的快速发展&#xff0c;物联网技术在工业领域的应用越来越广泛。作为连接设备与网络的关键节点&#xff0c;工业物联网网关起着至关重要的作用。本文将介绍工业物联网网关及其应用&#xff0c;并阐述如何实现设备的远程监控。 什么是工业物联网网关 工业物联网网…

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境 前言一、介绍 mkcert二、安装/使用 mkcert1. 安装2. 使用 总结 前言 本地开发时有些功能只有在 https 证书的情况下才能使用, 例如一些 Web API 一、介绍 mkcert Github地址 mkcert 是一个制作本地可信开发证书的简单工具。…

IMU在网球运动伤害预防中的作用

来自悉尼大学的研究团队最近的一项实验探讨了上肢网球损伤及其与球员使用的正手击球技术的关联。开发的可穿戴技术配备了惯性测量单元 &#xff08;IMU&#xff09;&#xff0c;可以深入分析前臂肌肉活动、握力和冲击传递——这些成分与肘部肌腱病等慢性损伤有关。 采用IMU传感…

Vue左侧菜单栏显示问题

关于 使用若依系统&#xff0c;路由中左侧菜单栏一级菜单中只有一个二级菜单&#xff0c;一级菜单不显示的问题&#xff01;&#xff01;&#xff01; 在一级组件中添加 alwaysShow: true,

【Flink系列五】Checkpoint及Barrier原理

本章内容 一致性检查点从检查点恢复状态检查点实现算法-barrier保存点Savepoint状态后端&#xff08;state backend&#xff09; 本文先设置一个前提&#xff0c;流处理的数据都是可回放的&#xff08;可以理解成消费的kafka的数据&#xff09; 一致性检查点&#xff08;che…