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

Python脚本求助:地板预算最优组合计算问题

问题修正与解决方案

你当前的代码完全搞错了需求逻辑:itertools.combinations是用来选不重复的单价组合然后求和,但实际你需要给每个房间分配任意单价(同一个单价可以给多个房间用),计算的是「房间面积×对应单价」的总和,不是单价本身的和。另外你提到的“至少使用一种独特单价”,应该是指方案里不能所有房间都用同一种地板(也就是至少用两种不同单价),不然这个条件毫无意义。

直接上修正后的代码:

import itertools

# 你的原始数据
floor_prices = [1.00, 1.40, 1.43, 1.58, 2.09, 2.97, 3.25, 3.99, 4.12, 4.29, 4.48]
room_areas = [896, 132, 132, 120, 219, 88, 189, 41]
max_budget = 3500

# 初始化最优结果
best_cost = 0
best_plan = None

# 生成所有可能的单价分配方案:每个房间选一个单价(可重复)
for price_assignment in itertools.product(floor_prices, repeat=len(room_areas)):
    # 计算总费用
    total_cost = sum(area * price for area, price in zip(room_areas, price_assignment))
    # 检查条件:不超预算,且至少用了两种不同单价
    if total_cost <= max_budget and len(set(price_assignment)) >= 2:
        # 更新最优方案
        if total_cost > best_cost:
            best_cost = total_cost
            best_plan = price_assignment

# 输出结果
if best_plan:
    print(f"最优方案总费用: {best_cost:.2f} 美元")
    print("各房间地板单价分配:")
    for i, (area, price) in enumerate(zip(room_areas, best_plan), 1):
        print(f"房间{i}({area} 平方英尺): {price:.2f} 美元/平方英尺")
else:
    print("没有满足条件的方案")

为什么你的代码不行?

  1. combinations只能选不重复的单价,而实际场景中多个房间可以用同一种地板;
  2. 你直接求和单价,而不是用「面积×单价」计算总费用,完全偏离了实际成本计算逻辑;
  3. 你要求sum(seq) == target,但实际我们需要的是总费用不超过且最接近预算,而不是等于。

性能提示

因为有8个房间、11种单价,总共有11^8≈2.14亿种组合,直接跑可能有点慢。如果要优化,可以加剪枝逻辑:比如计算到某几个房间的费用后,加上剩余房间用最便宜地板的费用已经超预算,就直接跳过这个分支;或者用动态规划记录已有的费用组合,避免重复计算。


内容的提问来源于stack exchange,提问作者Kamran Noei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:05:17