目录
- 一、题目描述
- 二、输入描述
- 三、输出描
- 四、解题思路
- 五、JavaScript算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
某云短信厂商,为庆祝国庆,推出充值优惠活动。
现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。
二、输入描述
第一行客户预算M,其中 0<=M<=1000000。
第二行给出售价表,P1,P2…Pn, 其中 1<=n<=100,Pi为充值i元获得的短信条数。 1<=Pi<=1000, 1<=n<=100。
三、输出描
最多获得的短信条数。
四、解题思路
- 如果客户预算小于0 或者 已计算的元素下角标大于客户预算,返回当前短信条数;
- 从已计算的元素下角标开始遍历出售价表;① 计算充值金额为i+1元时获得的短信条数,递归调用(客户预算、出售价表、短信条数msgCount + arr[i]、已计算的元素下角标);② 计算未选择当前售价时获得的短信条数p2,递归调用,③ 更新max,为max、p1、p2中的最大值;
- 返回最多获得的短信条数;
五、JavaScript算法源码
function getMaxMsgCount(money, arr, msgCount, usedIndex) {
if (money <= 0 || usedIndex > money) {
return msgCount;
}
let max = Number.MIN_SAFE_INTEGER;
for (let i = usedIndex; i < arr.length; i++) {
let p1 = 0;
if (money - i - 1 >= 0) {
p1 = getMaxMsgCount(money - i - 1, arr, msgCount + arr[i], usedIndex);
}
const p2 = getMaxMsgCount(money, arr, msgCount, usedIndex + 1);
max = Math.max(max, Math.max(p1, p2));
}
return max;
}
六、效果展示
1、输入
10
10 20 30 50 70 100
2、输出
150
3、说明
分两次充值最优,4元、6元各充一次。总条数 50+100=150
🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。