保证每个面的x<y。
然后为了减小无效搜索的次数,对于面进行了排序,以y为第一关键字,x为第二关键字,都是用quicksort,发现快速排序用起来真的是挺方便,不过不要排序直接DP应该也是没有问题的。
(当然merge sort还能更快,就是代码太多了。值得一提的是尽管merge sort和heap sort的最坏情况的复杂度都是比较排序的极限O(nlgn)但是其中隐含的参数还是有些区别的,merge sort要更快一些。)
排完了序以后,能放在第i个面上的面必定在0~i-1中,maxdone[]这个数组存储已经计算出的每个面上能包括该面能垒的最高高度,所以符合DP的要求
1.最优子结构:如果第i个面已经是最高高度,则它上面的i-1这个面以上也是i-1这个面可以垒的最高高度。
2.重叠子问题:重叠的子问题的结果存储在maxdone[]用来加速计算。