ZJU-1093

 

DP,先对输入进行处理,每一个立方体处理为3个面,如有尺寸雷同面,则合并。
保证每个面的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[]用来加速计算。

 

 

发布了68 篇原创文章 · 获赞 26 · 访问量 18万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章