题解 | #餐馆#

餐馆

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:46
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务