问题:给定一个整数数组 A[],长度 = n 和一个给定的整数值 TARGET。找到满足其总和小于 TARGET 且最接近该 TARGET 的子序列(可能不连续)。
例如:A[] = [10, -2, 3, 7]。目标 = 14。答案 = {10, 3}
我在 Hackerrank 挑战中遇到了这个问题,我无法找出任何多项式时间解决方案,它首先听起来对一些动态规划问题很熟悉,但在这种情况下,条件“不大于”和“最近”似乎消除了该解决方案。
从我遵循动态规划方法的第一个想法开始,在 i-problem (i=0->n-1) 处,我们需要评估所有包含 A[i] 或不包含 A[i] 的子序列,后者被称为 S[i-1],所以只关注以 A[i] 作为最后一个元素的所有子序列。
我们不能仅仅依赖以前解决的问题(0-> i-1),因为我们需要的总和必须小于并且最接近目标可能不会从较小的解决方案中产生,它可能是从第二个解决方案产生的,第三个加上最后一个元素 A[i],并且遍历所有包含 A[i] 的子序列将需要遍历所有 2^i - 1 个子集,不包括单个集合 {A[i]}。
对这类问题有什么建议吗?