You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

婚宴场景下禁拼桌的宾客桌位最优最小座位分配方法

婚宴接待现场可用桌位表

上图为婚宴接待现场的可用桌位,现需为不同宾客团体预留对应桌位,要求分配方案达到最优效果。

核心需求为计算面向宾客群体的最优最小座位分配方案。

规则说明:单个宾客团体可同时占用多张餐桌,但严禁不同团体共用同一张餐桌(即不允许拼桌)。举例:若某6人规模的宾客团体需要安排座位,应当如何计算得到最优的座位分配结果。


问题本质

这是典型的约束下最优资源匹配问题,硬约束为不同团体不得拼桌,优化目标为全场景空置座位最少,实现桌位资源利用率最大化。

分配实现逻辑

  • 前置准备:先统计所有可用桌的单桌容量,将桌位按容量分类标记,同时将待分配的宾客团体按人数从大到小排序,优先满足大团体需求,避免大团体因小桌被提前占用被迫拆分多桌造成额外空位浪费。
  • 单团体分配优先级(以6人团体为例):
    1. 第一优先级:匹配容量刚好为6人的单桌,此时空置座位为0,为最优解,直接锁定分配即可。
    2. 第二优先级:若无刚好匹配的单桌,筛选所有容量≥6人的单桌,选择其中容量最小的桌位(比如同时有8人桌、10人桌可选时,选8人桌,仅空置2个座位,浪费远小于选10人桌)。
    3. 第三优先级:若所有单桌容量都小于6人,遍历所有可选的多桌组合,筛选总容量≥6人的组合,选择总空置位最少的组合分配(比如同时有「4人桌+3人桌」总容量7空置1位、「2张4人桌」总容量8空置2位两种选项时,优先选前者)。
  • 迭代校验:每完成一个团体的分配,就从可用桌池里移除已分配的桌位,再进行下一个团体的匹配,直到所有团体分配完成。

核心逻辑参考代码

def get_optimal_assignment(group_size: int, available_tables: list[int]) -> list[int]:
    """
    为单个宾客团体匹配最优桌位组合
    :param group_size: 团体人数
    :param available_tables: 可用桌位的容量列表,例[4,4,6,8,10]
    :return: 最优分配的桌位容量列表
    """
    # 优先匹配单桌最优解
    eligible_single = [cap for cap in available_tables if cap >= group_size]
    if eligible_single:
        return [min(eligible_single)]
    
    # 单桌容量不足时,遍历多桌组合找空位最少的方案
    from itertools import combinations
    min_waste = float('inf')
    best_combo = None
    # 按组合使用的桌数从小到大遍历,优先少用桌
    for table_count in range(2, len(available_tables)+1):
        for combo in combinations(available_tables, table_count):
            total_cap = sum(combo)
            if total_cap >= group_size:
                waste = total_cap - group_size
                if waste < min_waste:
                    min_waste = waste
                    best_combo = list(combo)
        # 找到当前桌数下的最优解即可终止,优先少占桌
        if best_combo:
            break
    return best_combo

内容的提问来源于stack exchange,提问作者Saleem K K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:21:43