盒子塔(堆叠立方体)

时间:2010-11-25 19:11:18

标签: algorithm dynamic-programming

我上周完成了这个任务,但找不到一个好的算法来解决问题。所以这是描述:

你可以建造一个有建筑立方体的稳定塔楼,不要将较大的立方体放在较小的立方体上,如果你不把较硬的立方体放入较轻的立方体中。制作一个程序,为您提供具有n个立方体的最高塔 输入:
在in.txt的第一行中,存在立方体数n(1 =< n =< 1000)。下面的n行包括两个正整数,一个立方体的边长和重量(两者都不高于2000)没有类似的立方体,其边长和重量是相同的 输出:
你必须把最高稳定塔的m号写入out.txt。进入第二行,您必须从塔底到顶部写入塔的序数m。根据塔的高度,我们指的是所有立方体的边长(而不是立方体的数量)。如果有多个解决方案,您可以提供您想要的任何内容 输入和输出的例子:
输入:
5
10 3
20 5
15 6
15 1
10 2
和输出:
3
2 1 5
这是对该计划的限制。时间限制:0.2秒。内存限制:16 Mb

我希望你能帮助我解决这个问题。 thx为所有帮助

1 个答案:

答案 0 :(得分:5)

关系“block A 可以置于块 B 之上”在块上定义partial order。您可以使用Kahn's algorithm(也称为“拓扑排序”)将其转换为总顺序,然后您可以按顺序遍历find the longest path

相关问题