# 堆叠问题
# 先按血量降序排序,然后按攻击力降序排序,相同血量按攻击力升序排序,这样就只用计算攻击力的最长降序子序列了
import sys
import bisect
def solve():
n, H, A = map(int, input().split())
data = sys.stdin.read().split('\n')
h_list = list(map(int, data[0].split()))
a_list = list(map(int, data[1].split()))
# 获取初始就能击败的怪物列表并排序
monster_list = [(h, a) for h, a in zip(h_list, a_list) if h <= H and a <= A]
monster_list.sort(key=lambda x: (-x[0], x[1]))
# 计算最长递减子序列长度(通过取-,计算LIS实现)
sorted_a_list = [-attack for _, attack in monster_list]
tail = []
for i in sorted_a_list:
index = bisect.bisect_left(tail, i)
# 是最大值,拓展序列
if index == len(tail):
tail.append(i)
# 不是,进行序列优化
else:
tail[index] = i
print(len(tail))
if __name__ == '__main__':
solve()
前几天有个书的堆叠问题来着,一眼看上去以为是0-1(你这什么邪道rpg,打完怪居然是直接继承怪的血攻),然后看到需要状态转移且二维数据都小于前一个数据,马上就想到了

京公网安备 11010502036488号