当前位置: 首页 > wzjs >正文

建立公司网站时什么是重要的it软件外包

建立公司网站时什么是重要的,it软件外包,南京口碑最好的装修公司,全国网络推广题目描述 给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌, 请计算所有轮结束后其可以获得的最高总分数。 选择规则如下: 在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数&…

题目描述

给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,
请计算所有轮结束后其可以获得的最高总分数。
选择规则如下:

  1. 在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数。
  2. 选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0。
  3. 选手的初始总分数为0,且必须依次参加每一轮。
    输入描述
    第一行为一个小写逗号分割的字符串,表示n轮的牌面分数,1<= n <=20。
    分数值为整数,-100 <= 分数值 <= 100。
    不考虑格式问题。
    输出描述
    所有轮结束后选手获得的最高总分数。
    用例
输入1,-5,-6,4,3,6,-2
输出11
说明

动态规划解选手选牌问题:从暴力到优化

一、核心解题思路

这道题目描述了一个选手在多轮游戏中选牌的规则,我们需要计算选手能获得的最高总分数。题目有两个关键规则:

  1. 选择获取当前牌:总分数加上当前轮次的牌面分数
  2. 选择跳过当前轮:总分数还原到3轮前的状态(如果不足3轮则置为0)

作为初学者,我们可以采用动态规划(Dynamic Programming)的方法来解决这个问题。动态规划特别适合这种有重叠子问题最优子结构的问题。

为什么选择动态规划?

  1. 问题可以分解:每一轮的选择只依赖于前面有限轮次的结果
  2. 有重叠子问题:计算某一轮的最高分数可能会重复使用前面轮次的结果
  3. 需要做最优决策:每一轮都要选择是拿牌还是跳过,以最大化最终分数

基本思路

我们可以定义一个dp数组,其中dp[i]表示进行到第i轮时能获得的最大分数。对于每一轮i,我们有两种选择:

  1. 拿当前牌:dp[i] = dp[i-1] + current_score
  2. 跳过当前轮:dp[i] = dp[i-3](如果i>=3),否则为0

然后我们取这两种选择中的较大值作为dp[i]的值。

二、完整代码实现

def max_score(cards):n = len(cards)if n == 0:return 0# 初始化dp数组,dp[i]表示前i轮能获得的最大分数dp = [0] * (n + 1)for i in range(1, n + 1):# 选择拿当前牌take = dp[i-1] + cards[i-1]# 选择跳过当前牌if i >= 3:skip = dp[i-3]else:skip = 0# 取两种选择中的较大值dp[i] = max(take, skip)return dp[n]# 处理输入输出
input_str = input().strip()
cards = list(map(int, input_str.split(',')))
print(max_score(cards))

三、算法原理解析

动态规划状态转移

我们的动态规划状态转移方程可以表示为:

dp[i] = max(dp[i-1] + cards[i-1],  # 选择拿当前牌dp[i-3] if i >= 3 else 0  # 选择跳过当前牌
)

其中:

  • dp[i-1] + cards[i-1]表示如果选择拿当前牌,那么最大分数就是前一轮的最大分数加上当前牌的分数
  • dp[i-3](当i>=3时)表示如果选择跳过当前牌,那么最大分数会回退到3轮前的状态

时间复杂度分析

  • 我们需要遍历所有n轮
  • 每轮的计算是常数时间O(1)
  • 因此总时间复杂度是O(n)

空间复杂度分析

  • 我们使用了一个长度为n+1的dp数组
  • 因此空间复杂度是O(n)
  • 可以优化到O(1)的空间,因为我们只需要保存前3轮的结果

四、示例解析

让我们用题目给出的示例来一步步解析:

输入1,-5,-6,4,3,6,-2

牌面数组:[1, -5, -6, 4, 3, 6, -2]

初始化:dp = [0, 0, 0, 0, 0, 0, 0, 0]

逐步计算

  1. 第1轮(牌=1):

    • 拿牌:dp + 1 = 0 + 1 = 1
    • 跳过:0(因为i=1 < 3)
    • dp = max(1, 0) = 1
  2. 第2轮(牌=-5):

    • 拿牌:dp + (-5) = 1 - 5 = -4
    • 跳过:0(因为i=2 < 3)
    • dp = max(-4, 0) = 0
  3. 第3轮(牌=-6):

    • 拿牌:dp + (-6) = 0 - 6 = -6
    • 跳过:0(因为i=3 == 3,dp=0)
    • dp = max(-6, 0) = 0
  4. 第4轮(牌=4):

    • 拿牌:dp + 4 = 0 + 4 = 4
    • 跳过:dp = 1
    • dp = max(4, 1) = 4
  5. 第5轮(牌=3):

    • 拿牌:dp + 3 = 4 + 3 = 7
    • 跳过:dp = 0
    • dp = max(7, 0) = 7
  6. 第6轮(牌=6):

    • 拿牌:dp + 6 = 7 + 6 = 13
    • 跳过:dp = 0
    • dp = max(13, 0) = 13
  7. 第7轮(牌=-2):

    • 拿牌:dp + (-2) = 13 - 2 = 11
    • 跳过:dp = 4
    • dp = max(11, 4) = 11

最终结果:dp = 11

五、总结

通过这个题目,我们学习了如何用动态规划解决有选择决策的问题。关键点包括:

  1. 定义状态:明确dp[i]表示什么
  2. 状态转移方程:如何从之前的状态推导当前状态
  3. 边界条件:处理初始状态和特殊情况
  4. 空间优化:可以只保存必要的状态来减少空间使用

对于初学者来说,动态规划可能看起来有些抽象,但通过多练习类似的题目,你会逐渐掌握这种强大的解题技巧。记住:

  1. 先尝试用递归思路理解问题
  2. 然后找出重叠子问题
  3. 最后用数组或变量存储中间结果避免重复计算

这个问题的变种可能包括改变跳过的轮数(比如跳过1轮或2轮),或者改变跳过后的分数计算规则。理解基础版本后,你可以尝试解决这些变种问题来巩固你的动态规划技能。

http://www.dtcms.com/wzjs/548656.html

相关文章:

  • 网站自助建设平台百度长沙最新确诊病例
  • 哪个地区网站建设好wordpress导入主题
  • 网上做环评立项的网站是哪个营销策划方案设计的技巧
  • 2018年网站建设工作总结商丘网站建设推广公司地址
  • 关于做情侣的网站的图片大全沈阳企业网站开发
  • 厦门哪里有教网站建设开福区网站建设论坛
  • 相亲网站做推广的照片是谁陕西交通建设集团西镇分公司网站
  • 没有网站可以做cpc吗店铺logo图片免费生成软件
  • 绥化做网站做网站和微信公众号如何招生
  • 网站改版提交 百度网站建设情况检查报告
  • 卫龙模仿iphone做网站上海服装网站建设
  • asp网站 没有数据库 管理员密码什么叫网站名称
  • 基于lamp网站建设实例个人网站建设平台
  • 汕头网页设计网站方案建站系统和构建系统
  • 纯前端网站怎么做rest建设银行河北招聘网站
  • 做网站的客户需求报告答案做环保网站案例
  • 建网站有什么要注意的怀化买房网站
  • seo网站诊断流程广西建设工程协会网站
  • 做水果网站特点分析河南县网站建设公司
  • WordPress部署商城优化网站制作公司好吗
  • 网站内容栏目北京网站建设有哪些公司
  • 做海淘的网站wordpress手机后台版
  • 赣州哪里可以做网站外贸推广平台哪个好
  • 帝国网站采集管理怎么做肇庆网站制作
  • 聚美优品一个专注于做特价的网站亚马逊欧洲站vat怎么申请
  • 郑州东区做网站电话加盟网站做推广怎么收费
  • 网页建站怎么设置企业官网和小程序的商城版本的区别
  • 网站建设需要注意些什么dedecms能做什么网站
  • 网站制作的英文多语言站点 wordpress
  • 旅游网站开发的背景及意义60天做网站