我遇到了下面的面试问题,我不明白在这里需要做什么?
假设您要建造一个很高的塔。你有一个 积木的集合,使您的塔楼高出对于每种块类型, 系统会为您提供该类型的块数,权重, 以及障碍物可以支撑的最大重量,包括 本身。假设(现在)所有块都具有相同的高度(1 仪表)。您可以通过堆叠这些塔来建造最高的塔 块?
下面是示例输入,每一行代表一个块类型,格式为“”
1 1 1
10 2 10
100 3 100
输出应为:35
解决此问题的最佳方法是什么?
答案 0 :(得分:1)
这是背包问题的一个变体: https://en.m.wikipedia.org/wiki/Knapsack_problem
这是动态编程的经典示例。我不会在这里写下该算法,因为有无数的人比我以前的解释能力更好,有关Wikipedia的文章无疑是一个不错的开始。
答案 1 :(得分:0)
所有块都具有相同高度的条件使我们可以使用贪婪方法解决此问题。
只需不断添加最轻的块,直到它们用完或超出该块可以支持的总重量即可。
您可以将其想象成是在顶部使用底部较重的部件自上而下建造塔。