这是一个来自编程竞赛的问题,我发现很难想出任何可行的算法来解决它。因此,我不是在寻找代码,而是要求一步一步的算法来解决它。
具体问题可在此处找到 http://www.olympiad.org.za/olympiad/wp-content/uploads/2013/01/2011PO-R2-Questions-0421.pdf(第5题)。
铺瓷砖
把瓷砖堆放在墙壁上是Bongani最喜欢的消遣之一。他所有的瓷砖厚度相同,但宽度和高度不同。Bongani获得了N块瓷砖,并按照一组规则使用它们。他只能将一块瓷砖放在另一块瓷砖的上面,前提是它比上一块瓷砖窄。Bongani可以将瓷砖旋转90度,使其宽度变成高度,高度变成宽度。他也可以完全丢弃一块瓷砖。给定一组瓷砖,请帮助Bongani找到他可以建造的最高瓷砖堆。例如,指定了瓷砖(3,3),(12,5),(5,8),(6,10)。为了获得最高的瓷砖堆,Bongani忽略了第一块瓷砖(3,3),因为它比下一块瓷砖小。他使用下一块瓷砖(12,5)作为宽度为12,高度为5。接下来,他使用两块8宽5高的瓷砖,然后是6宽10高的瓷砖。
我能想到的唯一办法就是获取所有可能的有效瓷砖排列,然后找到最高的排列。具体问题可在此处找到 http://www.olympiad.org.za/olympiad/wp-content/uploads/2013/01/2011PO-R2-Questions-0421.pdf(第5题)。