问题描述
小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)