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

求满足双兼容列表数量约束的元素选择最小总成本

满足双兼容条件的最小成本选取问题

问题明确

给定参数:

  • 成本列表:cost = [2,3,1,6,4](索引0-4,选取对应元素需支付对应成本)
  • 兼容标记1:compatible1 = [1,1,0,1,0](值为1表示元素满足compatible1要求)
  • 兼容标记2:compatible2 = [0,1,0,0,1](值为1表示元素满足compatible2要求)
  • 约束条件:选取的元素中,满足compatible1的数量至少为2,满足compatible2的数量至少为2
  • 目标:找到满足约束的最小总成本(已知最优解为选取索引0、1、4,总成本9)

为什么贪心策略失效

你尝试的「优先选公共兼容项再选其他项」属于贪心思路,但这类策略仅能保证局部最优,无法覆盖所有全局最优的可能:

  • 比如若公共兼容项成本极高,同时存在多个低成本的单兼容项,此时选4个单兼容项(2个满足compatible1,2个满足compatible2)的总成本,会远低于选公共项+补充单兼容项的成本。贪心策略会因为优先选高成本公共项,错过更优组合。

可行解法

方法1:枚举法(适用于元素数量少的场景)

先对元素按兼容属性分类:

  • 类型A(仅满足compatible1):索引0、3,成本[2,6]
  • 类型B(仅满足compatible2):索引4,成本[4]
  • 类型C(同时满足双兼容):索引1,成本[3]
  • 类型D(都不满足):索引2,成本1(直接排除,选它只会增加成本,无法帮满足约束)

枚举所有满足约束的组合,计算总成本取最小:

  1. 选0个C:需选≥2个A和≥2个B,但B仅1个,此组合无效。
  2. 选1个C:需选≥1个A和≥1个B。取A中成本最低的(2)、B中唯一元素(4),总成本2+3+4=9。
  3. 选多个C:此案例仅1个C,无此可能。

最终最小成本为9,与已知最优解一致。

方法2:动态规划(适用于元素数量多的场景)

定义状态dp[i][a][b]表示考虑前i个元素时,已选a个满足compatible1的元素、b个满足compatible2的元素的最小成本。

状态转移规则:
对每个元素,分「选」或「不选」两种情况:

  • 不选:dp[i][a][b] = min(dp[i][a][b], dp[i-1][a][b])
  • 选:
    • 若元素双兼容:dp[i][a+1][b+1] = min(dp[i][a+1][b+1], dp[i-1][a][b] + cost[i])
    • 若仅满足compatible1:dp[i][a+1][b] = min(dp[i][a+1][b], dp[i-1][a][b] + cost[i])
    • 若仅满足compatible2:dp[i][a][b+1] = min(dp[i][a][b+1], dp[i-1][a][b] + cost[i])

最终答案为所有a≥2且b≥2的dp[n][a][b]中的最小值(n为元素总数)。

内容的提问来源于stack exchange,提问作者Ravi Sanka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:45