带单箱固定容量约束的n个带标签不同类球放入k个箱问题求解
该组合问题的求解思路
首先明确前置共识:由总球数n可被箱子数k整除,可得核心参数关系 n = k * c,以下分两类常见场景给出对应的计数、构造方案:
无额外类别分布约束的基础场景
仅要求每个箱子恰好装c个球,不限制不同类别球的分布:
- 箱子可区分(带独立编号,交换两个箱子的所有球属于不同方案)
总计数公式为 $\frac{n!}{(c!)k}$,构造逻辑很直观:按顺序给每个箱子选球,第一个箱子从n个带标签球中任选c个,第二个从剩余n-c个球中选c个,直到所有球分配完成即可,公式里除以$(c!)k$是为了消除每个箱子内部选球的顺序冗余。 - 箱子不可区分(无标识,交换两个箱子的所有球属于同一方案)
总计数需要在上面的结果基础上消除k个箱子的排列冗余,公式为 $\frac{n!}{k! \cdot (c!)^k}$。
带类别均衡要求的常见实际场景
如果实际需求中额外要求每个箱子里各类别球的占比和全局占比尽可能一致(或严格匹配),可以按以下步骤构造合法方案:
- 先统计每个类别的总球数,记类别i的总球数为$n_i$,满足$\sum_{i} n_i = n$
- 对每个类别单独分配:将该类的$n_i$个球均匀拆分到k个箱子,每个箱子分到的该类球数为$\lfloor n_i/k \rfloor$或$\lceil n_i/k \rceil$
- 校验每个箱子的总球数:由于总球数满足$n=k*c$,均匀分配后所有箱子的总球数必然可以凑到恰好c个,仅需要对余数对应的少量球做跨箱调整即可满足要求。
内容的提问来源于stack exchange,提问作者sergio09
相关产品推荐
相关产品推荐

