华为OD机试真题 JavaScript 实现【最多获得的短信条数】【2023Q1 100分】,附详细解题思路

在这里插入图片描述

一、题目描述

某云短信厂商,为庆祝国庆,推出充值优惠活动。现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。

二、输入描述

  1. 第一行客户预算M,其中 0 ≤ M ≤ 10^6
  2. 第二行给出售价表, P1, P2, … Pn , 其中 1 ≤ n ≤ 100 ,

Pi为充值 i 元获得的短信条数。

1 ≤ Pi ≤ 1000 , 1 ≤ n ≤ 100

三、输出描述

最多获得的短信条数。

四、解题思路

  1. 读取输入的客户预算 budget 和优惠售价序列 list;
  2. 创建一个长度为 budget + 1 的数组 dp,用于存储在不同预算下可获得的最多短信条数;
  3. 使用动态规划计算最多获得的短信条数:
    • 遍历优惠售价序列 list,对于每个售价 i,遍历从0到预算的所有金额 j。
    • 如果当前金额 j 大于等于当前售价 i,更新 dp[j] 为 dp[j] 和 dp[j - i - 1] + list[i] 的较大值,其中 dp[j - i - 1] 表示在剩余预算为j - i - 1 的情况下获得的短信条数,list[i] 表示当前售价 i 对应的短信条数。
  4. 输出 dp[budget],即在给定预算下可获得的最多短信条数。

五、JavaScript 算法源码

// 读取输入的客户预算 budget 和优惠售价序列 list
function calculateMaxSMS(budget, list) {
    // 使用动态规划计算最多获得的短信条数
    const dp = new Array(budget + 1).fill(0);

    // 遍历优惠售价序列 list,对于每个售价 i,遍历从0到预算的所有金额 j。
    for (let i = 0; i < list.length; i++) {
        for (let j = 1; j <= budget; j++) {
            if (j >= i + 1) {
                dp[j] = Math.max(dp[j], dp[j - i - 1] + list[i]);
            }
        }
    }

    return dp[budget];
}

六、效果展示

1、输入

12

2、输出

[10,20,50,70,90,130,180]

华为OD机试真题 JavaScript 实现【最多获得的短信条数】【2023Q1 100分】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,javascript,java)