2024华为OD机试真题-推荐多样性-C卷D卷-200分-(C++/Python)

【华为OD机试】-(C卷+D卷)-2024最新真题目录

题目描述

Wonderland是小王居住地一家很受欢迎的游乐园。Wonderland目前有4种售票方式,分别为一日票(1天)、三日票(3天)、周票(7天)和月票(30天)。

每种售票方式的价格由一个数组给出,每种票据在票面时限内可以无限制地进行游玩。例如:

  • 小王在第10日买了一张三日票,小王可以在第10日、第11日和第12日进行无限制地游玩。

小王计划在接下来一年多次游玩该游乐园。小王计划地游玩日期将由一个数组给出。

现在,请您根据给出地售票价格数组和小王计划游玩日期数组,返回游玩计划所需要地最低消费。

输入描述

输入为2个数组:

  • 售票价格数组为costs,costs.length = 4,默认顺序为一日票、三日票、周票和月票。
  • 小王计划游玩日期数组为days,1 ≤ days.length ≤ 365,1 ≤ days[i] ≤ 365,默认顺序为升序。

输出描述

完成游玩计划的最低消费。

用例1
输入 5 14 30 100
1 3 5 20 21 200 202 230
输出 40
说明 根据售票价格数组和游玩日期数组给出的信息,发现每次去玩的时候买一张一日票是最省钱的,所以小王会卖8张一日票,每张5元,最低花费是40元。
题目解析

本题可以用动态规划求解,定义一个dp数组,dp[i]的含义是前i天花费的金额。dp[i]可以通过前面dp的状态推导出来。

  • 如果第i天不是游玩日,即第i天不需要花钱,那么dp[i]=dp[i-1].
  • 如果第i天是游玩日,则分为四种情况:
  1. 第i天被一日票覆盖,那么dp[i]=dp[i-1]+costs[0],dp[i-1]为前i-1日的花费,costs[0]为第i日的花费。
  2. 第i天被三日票覆盖,那么dp[i]=(if i>=3 ? dp[i-3]:0) + costs[1]
  3. 第i天被周票覆盖,那么dp[i]=(if i>=7 ? dp[i-7]:0) + costs[2]
  4. 第i天被月票覆盖,那么dp[i]=(if i>=30? dp[i-30]:0) + costs[3]

因此,我们可以选择四种情况中的最小花费。最后只需返回dp[maxday]即可,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024剑指offer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值