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

这篇具有很好参考价值的文章主要介绍了【华为OD题库-083】玩牌高手-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]

题解

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),查看当前专栏更新的所有题目。

说明

本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。文章来源地址https://www.toymoban.com/news/detail-756441.html

到了这里,关于【华为OD题库-083】玩牌高手-Java的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为OD题库-084】最长连续子序列-Java

    有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度。如果没有满足要求的序列,返回-1。 输入描述 第一行输入是:N个正整数组成的一个序列 第二行输入是:给定整数sum 输出描述 最长的连续子序列的长度 备注 输入序

    2024年02月04日
    浏览(42)
  • 【免费题库】华为OD题库C卷 - API集群负载统计(Java 代码+解析)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实

    2024年04月13日
    浏览(46)
  • 【华为OD统一考试(B卷)】统计监控、需要打开多少监控器,JAVA 题解 | 华为OD机试考题

    华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 参加华为 od 机试,一定要注意不要完全背诵代码

    2024年02月12日
    浏览(46)
  • 矩阵匹配【华为OD机试JAVA&Python&C++&JS题解】

    从一个N M(N=M)的矩阵中选出N个数,任意两个数字不能在同一行或同一列,求选出来的N个数中第K大的数字的最小值是多少。 输入描述: 输入矩阵要求:1=K=N=M=150 输入格式:N M K N M矩阵 输出描述: N*M的矩阵中可以选出M!/N!种组合数组,每个组合数组中第K大的数中的最小值。

    2024年04月12日
    浏览(41)
  • 【免费题库】华为OD题库C卷 - We Are A Team(Java 代码+解析)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 总共有 n 个人在机房,每个人有一个标号(1=标号=n),他们分成了多个团队,需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的: 消息构成为 a b c,整数 a、

    2024年04月12日
    浏览(45)
  • 【免费题库】华为OD机试 - 跳马(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或者直者走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称\\\"马走日\\\"字。 给定

    2024年04月09日
    浏览(52)
  • 【华为OD机考 统一考试机试C卷】螺旋数字矩阵(Java题解)

    2023年11月份,华为官方已经将 华为OD机考:OD统一考试(A卷 / B卷)切换到 OD统一考试(C卷)和 OD统一考试(D卷) 。根据考友反馈:目前抽到的试卷为B卷或C卷/D卷,其中C卷居多 ,按照之前的经验C卷D卷部分考题会复用A卷/B卷题,博主正积极从考过的同学收集C卷和D卷真题,

    2024年02月02日
    浏览(62)
  • 【免费题库】华为OD机试 - 找城市(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。城市与城市之间的道路都不会成环。 当切断通往

    2024年04月12日
    浏览(52)
  • 【免费题库】华为OD机试 - 游戏分组(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛

    2024年04月09日
    浏览(67)
  • 【免费题库】华为OD机试 - 转骰子(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上, 可以向左翻转(用L表示向左翻转1次), 可以向右翻转

    2024年04月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包