Excel中最优计算有效物品组合集最大数量的公式求解
Excel中最优计算有效物品组合集最大数量的公式求解
嘿,我来帮你搞定这个Excel里的最优集合计数问题!你的需求其实就是要算出最多能凑出多少个符合要求的集合——每个集合得用3种不同的物品各1个,用掉的物品数量要相应减少,最终要得到最理想的最大数量对吧?
先给你理清楚核心逻辑:要最大化集合数X,需要满足两个关键约束:
- 所有物品的总数量除以3取整(毕竟每个集合要消耗3个物品),这是理论上限
- 每个物品最多只能在X个集合里各出现1次(因为一个集合里不能重复用同一个物品),所以把每个物品的数量和X取最小值后求和,这个总和必须至少是3X(保证能凑出X个集合的物品需求)
下面给你三种不同的实现方法,适配不同版本的Excel:
方法一:用规划求解(直观易操作,适合所有版本)
规划求解是Excel自带的线性规划工具,能直接帮你算出最优解,步骤如下:
- 把你的物品数量放在一行,比如Test1的A2:F2,Test2的A3:F3
- 找一个空白单元格(比如G2),用来存放我们要求的最大集合数X
- 再找6个空白单元格(比如H2:M2),对应每个物品在集合中被使用的次数
- 打开「数据」选项卡的「规划求解」(如果找不到,先在「选项-加载项」里启用规划求解加载项)
- 设置参数:
- 目标单元格:选G2,目标选「最大值」
- 可变单元格:选H2:M2(每个物品的使用次数)
- 添加约束:
- 每个使用次数单元格 <= 对应物品的数量(比如H2<=A2,I2<=B2…)
- 每个使用次数单元格 <= G2(每个物品最多在X个集合里出现一次)
- SUM(H2:M2) = 3*G2(总消耗物品数是3倍的集合数)
- 点击「求解」,G2里就会出现最优的集合数了
比如Test1会得到5,Test2得到2,完全符合你的例子。
方法二:用Excel 365/2021的LET函数公式(简洁高效)
如果你用的是新版Excel,支持LET、SEQUENCE这类函数,可以直接用下面的公式(假设物品数量在A2:F2):
=LET( qty, A2:F2, total, SUM(qty), upper1, FLOOR(total/3), x_vals, SEQUENCE(upper1), valid_x, FILTER(x_vals, SUM(MIN(qty, x_vals)) >= 3*x_vals), MAX(valid_x) )
公式解释:
qty:引用你的物品数量区域total:计算所有物品的总数量upper1:总数量除以3取整,得到X的理论上限x_vals:生成1到upper1的所有候选X值valid_x:筛选出满足「各物品可用次数求和≥3X」的候选值MAX(valid_x):取最大的有效X,就是最优解
方法三:旧版Excel的数组公式(兼容性强)
如果你的Excel版本比较旧,不支持LET函数,可以用下面的数组公式(同样假设数量在A2:F2),输入时要按Ctrl+Shift+Enter完成输入:
=MAX(IF(SUM(IF(A2:F2>ROW(INDIRECT("1:"&FLOOR(SUM(A2:F2)/3))),ROW(INDIRECT("1:"&FLOOR(SUM(A2:F2)/3))),A2:F2))>=3*ROW(INDIRECT("1:"&FLOOR(SUM(A2:F2)/3))),ROW(INDIRECT("1:"&FLOOR(SUM(A2:F2)/3))),0))
这个公式的逻辑和新版的一致,只是用旧函数实现了候选值的遍历和筛选。
备注:内容来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

