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

面向SQL优化衍生的图论最小成本贿赂策略通用算法求解

最小成本贿赂方案的通用算法解决思路

核心方法:状态动态规划(DP)

由于人数N≤10,我们可以用二进制掩码表示已获得认可的人员集合,通过动态规划遍历所有可能的状态,找到从空集合到全集合的最低成本路径。

状态定义

用dp[mask]表示达成mask状态(二进制每一位对应人员是否已认可)所需的最小成本。例如N=3时,mask=0b111代表所有人都认可,dp[0b111]就是最终要求的答案。初始时dp[0] = 0,其余状态设为无穷大。

方案预处理

把两种贿赂方案统一转换为「前置条件掩码+目标人员+成本」的格式:

  • 直接贿赂:前置条件掩码为0(无前置要求),目标是指定人员,成本为给定值。
  • 群体贿赂:把要求的群体成员转换成二进制掩码(比如成员1对应0b001),目标是指定人员,成本为给定值。

状态转移逻辑

遍历每个状态mask:

  1. 如果dp[mask]为无穷大,说明该状态无法到达,直接跳过。
  2. 对每个预处理后的方案:
    • 检查当前mask是否满足方案的前置条件(即mask & 前置掩码 == 前置掩码)。
    • 若满足,计算执行方案后的新状态new_mask = mask | (1 << (目标人员-1))。
    • 更新dp[new_mask]为当前dp[new_mask]和dp[mask] + 方案成本中的较小值。

示例验证

以题目中的N=3为例:

  • 初始dp[0] = 0。
  • 执行直接贿赂1的方案后,dp[0b001] = 10。
  • 基于0b001状态执行群体贿赂2的方案,dp[0b011] = 10+5=15。
  • 基于0b011状态执行群体贿赂3的方案,dp[0b111] =15+3=18,这就是最优解。

伪代码实现

def min_total_bribe(N, schemes):
    processed = []
    for s in schemes:
        if len(s) == 2:
            # 直接贿赂:目标、成本
            target, cost = s
            processed.append( (0, target, cost) )
        else:
            # 群体贿赂:成员列表、目标、成本
            group = s[:-2]
            target, cost = s[-2], s[-1]
            pre_mask = 0
            for member in group:
                pre_mask |= 1 << (member - 1)
            processed.append( (pre_mask, target, cost) )
    
    total_states = 1 << N
    dp = [float('inf')] * total_states
    dp[0] = 0
    
    for mask in range(total_states):
        if dp[mask] == float('inf'):
            continue
        for pre_mask, target, cost in processed:
            if (mask & pre_mask) == pre_mask:
                new_mask = mask | (1 << (target - 1))
                if dp[new_mask] > dp[mask] + cost:
                    dp[new_mask] = dp[mask] + cost
    
    return dp[(1 << N) - 1]

复杂度说明

  • 状态总数为2^N,N=10时仅1024个状态。
  • 每个状态遍历最多N*2^(N-1)个方案,总计算量约500万次,完全高效可行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:38:19