import sys
from typing import List
inputs = []
for line in sys.stdin:
inputs.extend(map(int, line.split()))
def takeSecond(elem):
return elem[1]
def max_values(nums: List[int]) -> int:
max_values = 0
n, m = nums[0], nums[1]
a = sorted(nums[2:2 + n])
bc = sorted([[nums[i], nums[i+1]] for i in range(2 + n, 2 + n + 2 * m, 2)], key=takeSecond, reverse=True)
for item in bc:
if not a:
break
if item[0] > a[-1]:
continue
# 使用二分查找找到合适的位置
from bisect import bisect_left
position = bisect_left(a, item[0])
max_values += item[1]
a.pop(position) # 注意:这里会改变数组a的顺序,可以考虑其他方法避免修改a
return max_values
print(max_values(inputs))
第一步:将m批次客人按照金额降序进行排列
第二步,先安排符合单桌最大人数要求的客人中金额较大批次,不符合直接无法安排,换一批客人
第三步,记录被安排的桌次,直到所有桌次被占满(break执行),或者批次已被安排完成(for循环自己结束)

京公网安备 11010502036488号