如何找到元素之间的最小距离大于某个值且元素值之和最大的子集?

问题描述

我想在这里解决一个算法问题。

一个数组中有n个不同的元素,它们的位置从x_1到x_n。每个元素都有一个单独的 p 值(所以对于数组中的第 i 个元素,它的位置是 x_i,它的 p 值是 p_i)。

首先选择给定数组的任意子集 S(所以 0 k)。然后你必须找到这样的子集 S 中任何一对元素的 p 值的最大和。

关于如何在多项式时间内做到这一点的任何想法?

谢谢。

解决方法

动态编程

对于每个元素,您都可以选择是否包含它。如果包含它,则不能包含最后 k 个元素中的任何一个,当前值 + 当前索引处的最大值 - k。如果不包含当前元素,则最后一个索引最大值将是当前元素的最大值。

for(let i=0;i