题解 | #餐馆#

餐馆

https://www.nowcoder.com/practice/d2cced737eb54a3aa550f53bb3cc19d0

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循环自己结束)

全部评论

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务