【问题标题】:Dynamic Programming - Circular Maximum Weighted Independent Set动态规划 - 循环最大加权独立集
【发布时间】:2019-10-29 13:26:54
【问题描述】:

我了解 MWIS 算法及其子问题

A[i]=max(A[i-1], A[i-2]+W[i])

like this implementation

但是当它添加使序列为循环的条件时,意味着第一个元素连接到最后一个节点。

我被卡住了,无法找出正确的子问题..

【问题讨论】:

    标签: algorithm dynamic-programming scheduling bipartite


    【解决方案1】:

    答案其实很简单。假设您有一个来自A 的节点权重列表,其中A[i] 连接到A[i-1]A[i+1]

    还假设您有一个函数solve() 可以解决第一个和最后一个节点连接的 MWIS 问题。

    循环变化的唯一附加标准是,如果第一个节点在集合中,则最后一个节点不能在其中。如果最后一个节点在集合中,则第一个节点不能在其中。

    因此答案只是solve(A[1:])(没有第一个节点的数组的解决方案)和solve(A[:-1])(没有最后一个节点的数组的解决方案)的最大值。

    为什么这是正确的?考虑最佳答案。它必须缺少A[0]A[-1],因此它必须是A[1:]A[:-1] 的子集。

    【讨论】:

    • 感谢您的提示,它成功了。仅供参考,我也检查了这个codeforces
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2010-12-16
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多