动态规划——循环最大加权独立集

Dynamic Programming - Circular Maximum Weighted Independent Set

我了解 MWIS 算法及其子问题

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

like this implementation

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

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

答案其实很简单。假设您在 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].

的子集