题目来源
本题要求信封套信封,且外部的信封的宽、高必须都大于内部的信封的宽、高,问最多能套几个。
首先,我们很容易想到,将所有信封按照宽度升序,这样就可以保证只看宽度的话,排序靠前的信封可以被排序靠后的信封套进去。
真的是这样吗?
如果有两个宽度相同的信封,那么它们就无法嵌套。
因此,我们需要排除掉宽度相同的情况。
一种方案是dfs,比如宽度有 [1,2,3,3,4,5,5,5]
则宽度上一共有:2*3=6种嵌套方案,即不看宽度唯一的,那么只剩下[3,3,5,5,5],而重复的宽度的高度可能不同,因此这里需要求包含重复情况组合。
但是这种方案非常麻烦,也浪费性能。
有一种更好的方案,那就是宽度重复的情况不用管,我们只需要将宽度相同的信封的高度从大到小排序即可。
原因是,信封嵌套,不经要求宽度内小外大,高度也要求内小外大,因此如果两个信封宽度相同,而它们的高度降序的话,则排序靠后的信封也无法套进前面的信封。
因此,我们首先需要将,信封按照宽度升序,对于宽度相同的信封,则按照高度降序。
那么宽度一维就搞定,接下来就是求高度一维的最长递增子序列了,而关于最长递增子序列的求解请看这个博客
已下架不支持订阅
521

被折叠的 条评论
为什么被折叠?



