小E的怪物挑战

问题描述

小E在一个游戏中遇到了nn个按顺序出现的怪物。每个怪物都有其特定的血量hihi​和攻击力aiai​。小E的初始血量为HH,攻击力为AA。游戏规则如下:

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

 首先我就没搞懂,为什么第二个样例会输出2?

按理来说,排序之后怪物的列表应该是:[(4, 2), (6, 8), (9, 9), (12, 10)]

那么小E的攻击力和血量都是10,所以他应该能打3只怪啊。

但是AI告诉我这里面的(4, 2)没有,问他为什么就老是搁那里答非所问,搞得我就百思不得其解,题目也没说血量必须小于生命值啊,这到底错在哪了???

我最后的答案写在下面,如果有大佬知道的话求解答一下,谢谢!😭

def solution(n: int, H: int, A: int, h: list, a: list) -> int:
    # PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
    # write code here
    monsters_raw = []
    for i in range(len(h)):
        monsters_raw.append((h[i], a[i]))
    monsters_raw.sort(key=lambda x :x[0])
    # print(monsters)
    attack = 0
    monsters = []
    for j in monsters_raw:
        if j[1] > attack:
            attack = j[1]
            monsters.append(j)
        else:
            continue
    print(monsters)
    little_E = (H, A)
    place = 0
    for monster in monsters:
        if little_E > monster:
            place += 1
        else:
            break
    return place

if __name__ == '__main__':
    print(solution(3, 4, 5, [1, 2, 3], [3, 2, 1]) == 1)
    print(solution(5, 10, 10, [6, 9, 12, 4, 7], [8, 9, 10, 2, 5]) == 2)
    print(solution(4, 20, 25, [10, 15, 18, 22], [12, 18, 20, 26]) == 3)

要饿死了,今天6点下班了感觉回去玩怪猎荒野!

-----------------------------------2025/3/3-----------------------------------

玩了一个周末,把荒野本体通了,打到HR56了,铳枪真好玩🤭

  好吧,题目说的按顺序出现的怪物,我默认自己是游戏的设计师,可以随意更改怪物的顺序了,但是这不是很奇怪吗?为什么题目又要求怪物的血量和攻击力必须严格按照从低到高来排,但是我又不能改他的顺序?感觉这样很不符合通常的游戏思维啊-.-

反正就是例子里面给的那个h和a这两个列表的顺序是不能改的,就不用再给他排序了。(这题标的还是个中等的难度)

答案代码:

def solution(n: int, H: int, A: int, h: list, a: list) -> int:
    assert n == len(a) == len(h)
    t = [(x, y) for x, y in zip(h, a) if x < H and y < A]
    m = len(t)
    f = [1 for _ in range(m)]
    for i in range(m):
        for j in range(i):
            if t[j][0] < t[i][0] and t[j][1] < t[i][1]:
                f[i] = max(f[i], f[j] + 1)
    assert m > 0
    return max(f)


if __name__ == '__main__':
    print(solution(n = 3, H = 4, A = 5, h = [1, 2, 3], a = [3, 2, 1]) == 1)
    print(solution(n = 5, H = 10, A = 10, h = [6, 9, 12, 4, 7], a = [8, 9, 10, 2, 5]) == 2)
    print(solution(n = 4, H = 20, A = 25, h = [10, 15, 18, 22], a = [12, 18, 20, 26]) == 3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值