我有一个正整数数组 A [a0, a1, a2, ..., an] 和一个正数 K。我需要找到数组 A 的所有(或几乎所有)子集 U 和 V 对,例如:
- U 中所有元素的总和小于或等于 K
- V中所有元素的总和小于或等于K
- U + V 可能不包含原始数组 A 的所有元素
- U 中的所有元素都应该在初始数组 A 中 V 中的所有元素之前。例如,假设我们选择 U = [a1, a3, a5] 那么我们可以仅从 a6 开始构建数组 V。在这种情况下,不允许使用元素 a0、a2 或 a4。
我能够找到 DP 解决方案,即 O(N^2 * K^2) (其中 N 是 A 中的元素总数)。尽管 N 和 K 很小(< 100),但仍然太慢。
我正在寻找一些近似算法或伪多项式动态规划算法。装箱问题看起来与我的相似,但我不确定如何将其应用于我的约束......
请指教。
编辑:每个数字的上限等于 50