通过堆叠各个街区来建造最高的塔楼?

时间:2019-06-18 02:54:25

标签: java algorithm data-structures

我遇到了下面的面试问题,我不明白在这里需要做什么?

  

假设您要建造一个很高的塔。你有一个   积木的集合,使您的塔楼高出对于每种块类型,   系统会为您提供该类型的块数,权重,   以及障碍物可以支撑的最大重量,包括   本身。假设(现在)所有块都具有相同的高度(1   仪表)。您可以通过堆叠这些塔来建造最高的塔   块?

下面是示例输入,每一行代表一个块类型,格式为“”

1   1  1
10  2  10
100 3  100

输出应为:35

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这是背包问题的一个变体: https://en.m.wikipedia.org/wiki/Knapsack_problem

这是动态编程的经典示例。我不会在这里写下该算法,因为有无数的人比我以前的解释能力更好,有关Wikipedia的文章无疑是一个不错的开始。

答案 1 :(得分:0)

所有块都具有相同高度的条件使我们可以使用贪婪方法解决此问题。
只需不断添加最轻的块,直到它们用完或超出该块可以支持的总重量即可。
您可以将其想象成是在顶部使用底部较重的部件自上而下建造塔。