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