查找点的子集,例如xs总和最多A和ys总和至少为B

时间:2018-03-25 05:31:57

标签: algorithm

我解决了一个问题,然后将其缩小为以下问题:

给定n(x1, y1), ..., (xn, yn)分(0 <= xi, yi),和两个整数 AB0 <= A, B我需要找到这些点的子集,以便:

1)x值的总和最多为ASUM(x) <= A)。
2)y值的总和至少为BSUM(y) >= B)。

我正在努力解决这个问题,除了合并之外我找不到解决方案。我会很感激一些想法。

UPD :xi和A是有理数(表示为浮点数/双精度数)。 yi和B是整数。

1 个答案:

答案 0 :(得分:0)

根据分布和可用空间,我们可以创建"merge sort" segment tree,其中段划分X范围,树阵列节点按y值排序。然后测试A的分区,以便我们可以选择每个部分右边界最多的x个s,从分段树中选择y中的前O(log n)个值