我已经给出了xy项,我需要选择一些x和一些带有一些限制的y项,比如x < 10y < 5,总数应该是p
如何解决这个问题。算法/数学技术。

最佳答案

诀窍是我们只需要遍历一个数组(例如x_数组),我们可以使用p-x=y计算出y。现在我们只需要确保y在y_数组中,我们知道我们有答案。为了确保y在y_数组中,我们创建一个集合或二叉搜索树来快速查找。
下面是一些python代码:

p=13
xs=[1,3,99,9,18]
ys=[10,4,33]

y_set=set(ys)

#y=p-x
results=((x,p-x) for x in xs if x<10 and p-x<5 and p-x in y_set)

print "x=%s,y=%s,p=13" % results.next()
'x=9,y=4,p=13'

09-06 20:15