算法练习题目:小E在一个游戏中遇到了 n n个按顺序出现的怪物。每个怪物都有其特定的血量 h i h i ​ 和攻击力 a i a i ​ 。小E的初始血量为 H H,攻击力为 A A。游戏规

在这里插入图片描述

文章目录


题目

问题描述
在这里插入图片描述
1.小E可以击败血量和攻击力都小于她当前属性的怪物
2.对于每只怪物,小E可以选择与它战斗或者跳过这只怪物
3.为了保持战斗节奏,要求击败的怪物序列中,后一个怪物的血量和攻击力都必须严格大于前一个怪物

小E想知道,她最多能击败多少怪物。

**输入 **

n:怪物的数量
H:小E的血量
A:小E的攻击力
h[i]:第i个怪物的血量
a[i]:第i个怪物的攻击力
**输出 **

返回小E最多能击败的怪物数量
**约束条件 **

1 < n < 100
1 < H,A,h[i],a[i] < 1000
测试样例
样例1:

输入:n = 3, H = 4, A = 5, h = [1, 2, 3], a = [3, 2, 1]
输出:1

样例2:

输入:n = 5, H = 10, A = 10, h = [6, 9, 12, 4, 7], a = [8, 9, 10, 2, 5]
输出:2

样例3:

输入:n = 4, H = 20, A = 25, h = [10, 15, 18, 22], a = [12, 18, 20, 26]
输出:3

样例4:

输入:n = 4, H = 20, A = 25, h = [22, 18, 15, 10], a = [26, 20, 18, 12]
输出: 1

答案

function solution(n, H, A, h, a) {
    let cnt = 0; // 最多能击败的怪物数量
    let dp = {};  // dp对象存储每个怪物能击败的最多怪物数量

    for (let i = 0; i < n; i++) {
        // 如果小E的血量和攻击力能击败第i只怪物
        if (H > h[i] && A > a[i]) {
            dp[i] = 1; // 初始情况下,至少可以击败当前怪物
            // 尝试加入之前的怪物序列
            for (let j = 0; j < i; j++) {
                if (h[j] < h[i] && a[j] < a[i]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            // 更新最多击败怪物数量
            cnt = Math.max(dp[i], cnt);
        }
    }

    return cnt;
}

function main() {
    console.log(solution(3, 4, 5, [1, 2, 3], [3, 2, 1]) === 1);
    console.log(solution(5, 10, 10, [6, 9, 12, 4, 7], [8, 9, 10, 2, 5]) === 2);
    console.log(solution(4, 20, 25, [10, 15, 18, 22], [12, 18, 20, 26]) === 3);
}

main();

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奶糖 肥晨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值