题解 | 合唱队
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
import sys n = int(input()) lst = input().split() h = [int(x) for x in lst] # 简化输入处理 def max_chorus_length(heights): n = len(heights) if n <= 2: return n # 人数不足时无需调整 # 计算每个位置向左的最长递增子序列长度 left = [1] * n for i in range(n): for j in range(i): if heights[j] < heights[i]: # 严格递增 left[i] = max(left[i], left[j] + 1) # 计算每个位置向右的最长递减子序列长度 right = [1] * n for i in range(n-1, -1, -1): for j in range(i+1, n): if heights[j] < heights[i]: # 严格递减 right[i] = max(right[i],right[j] + 1) # 找到中间点i,使得left[i]+right[i]-1最大(减1是因为i被重复计算) max_length = 0 for i in range(n): max_length = max(max_length, left[i] + right[i] - 1) return max_length # 计算最少出列人数 max_keep = max_chorus_length(h) min_leave = n - max_keep print(min_leave)#动态规划#