【发布时间】:2016-06-10 04:28:15
【问题描述】:
我正在寻找满足一系列树和数据地图所描绘的需求的最佳方式。一棵基本的树可能如下所示:
10
/ \
A B
数据图可能如下所示:
A: 7
B: 6
在这些示例中,10 表示要求,而数据列表是我必须使用的。所以,我可以通过给它 4 个As 和 6 个Bs,或每个 5 个等来“填充”这棵树。现在,我想使用所有可用的 As 和 Bs我,并且有盈余不一定是问题(所以在这种情况下我将给出 7 和 6),但事情变得更加复杂;我们可以有多个树,树可以有多个层次,除了叶子之外的每个节点都是需求,可能会给我们这样的东西:
40 30
/ | \ / \
20 C D A C
/ \
A B
所以我们需要将第一棵树上的 A 和 B 添加到 20,将第一棵树上的 C 和 D 添加到 20,以及 A 和 C在第二棵树上加到 30。(没有一棵树应该有相同的字母出现两次。)我们可以在一棵树中拥有任意数量的级别,或者任意数量的树。
最后,我们的数据集可能并不完美。优化后可能无法将两棵树都填满(我们可能两棵树都达不到它们的要求,我们可能有一棵树超过了要求,而另一棵树却达不到要求,等等)我需要的是一种方法,给定这些树以及我们有多少As、Bs、Cs 等可用的列表,填满尽可能多的树。我们已经有一段时间了,但我们中没有人擅长证明“这种方式每次都有效”。
有谁知道这样做的方法吗?
【问题讨论】:
-
(你会尝试描述一个贪心近似吗?)