题解 | 信封嵌套
信封嵌套
https://www.nowcoder.com/practice/25fe1fc89c4c4e82bbc63df04bc6ca30
import sys
# 22:51
# 首先简化问题,将信封按照长或者宽从小到大排序
# 那么考虑多少层嵌套,只需要考虑当前信封前,有多少信封的宽(或者长)小于当前信封,
# 相当于找最长的递增子序列,假设dp[i]为以信封i为结尾的嵌套层数,
# dp[i] = max(dp[0~i-1]中满足width 小于当前信封的dp[j] +1)
from collections import defaultdict
n = int(input())
letters = []
for _ in range(n):
letter = list(map(int,input().split()))
letters.append(letter)
letters.sort(key=lambda x: x[0])
dp = [0] * (n+1) # dp[i]为以i为最外层的信封嵌套数
letters = [[0,0]] + letters
for i in range(1,n+1):
height,width = letters[i]
for j in range(i):
cur_height, cur_width = letters[j]
# remove the situation where height the same but width less
if cur_height<height and cur_width < width:
dp[i] = max(dp[i],dp[j])
dp[i] += 1
print(max(dp))
阿里云成长空间 763人发布