a_lc_堆叠长方体的最大高度(最长上升子序列变形)

如果 widthi <= widthj 且 lengthi <= lengthj 且 heighti <= heightj ,你就可以将长方体 i 堆叠在长方体 j 上。你可以通过旋转把长方体的长宽高重新排列,以将它放在另一个长方体上。返回 堆叠长方体 cuboids 可以得到的 最大高度 。

思路:因为可以对每个长方体进行旋转,所以可以先对每个正方形按长宽高升序排序,再对每个长方形的一个维度进行排序,然后对另外两个维度求LIS

class Solution:
    def maxHeight(self, A: List[List[int]]) -> int:
        for a in A:
            a.sort()
        A.sort() #换成这样就过不了: A.sort(key=lambda a : a[0])
        n,ans=len(A),0 
        f=[0]*n
        for i in range(n):
            f[i]=A[i][2]
            for j in range(i):
                if A[j][1]<=A[i][1] and A[j][2]<=A[i][2]:
                    f[i]=max(f[i], f[j]+A[i][2])
            ans=max(ans,f[i])
        return ans
posted @ 2020-12-14 17:01  童年の波鞋  阅读(146)  评论(0编辑  收藏  举报