【发布时间】:2019-10-29 13:26:54
【问题描述】:
我了解 MWIS 算法及其子问题
A[i]=max(A[i-1], A[i-2]+W[i])
但是当它添加使序列为循环的条件时,意味着第一个元素连接到最后一个节点。
我被卡住了,无法找出正确的子问题..
【问题讨论】:
标签: algorithm dynamic-programming scheduling bipartite
我了解 MWIS 算法及其子问题
A[i]=max(A[i-1], A[i-2]+W[i])
但是当它添加使序列为循环的条件时,意味着第一个元素连接到最后一个节点。
我被卡住了,无法找出正确的子问题..
【问题讨论】:
标签: algorithm dynamic-programming scheduling bipartite
答案其实很简单。假设您有一个来自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] 的子集。
【讨论】: