题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
'''解析: n位同学顺序不可改变,要抽出最小人数,使剩余人的身高符合 ^ / \ 三种走势之一(严格升序/降序)。 将每位同学i作为最高点,依次找出抽出人数,其中的最小值即为结果。 需要抽出的人数f(n) 计算方法: 同学i左面 符合严格升序的最多人数 l(i) 同学i右面 符合严格降序的最多人数 r(i) 同学i自己 队伍长度=l(i)+r(i)+1 需抽出的人数f(n)=n-(l(i)+r(i)+1) ''' n=int(input()) h=list(map(int,input().split())) #print(h) l=[0]*n # 0*n列表,用于记录i左面有几个人 for i in range(n): for j in range(i): # 不包括i if h[i]>h[j] and l[j]+1>l[i]: l[i] += 1 #print(l) r=[0]*n # 0*n列表,用于记录i右面有几个人 for i in range(n-1,-1,-1): # 从右往左 for j in range(n-1,i,-1): if h[i]>h[j] and r[j]+1>r[i]: r[i] += 1 #print(r) chorus=[l[i]+r[i]+1 for i in range(n)] #print(chorus) out=[n-chorus[i] for i in range(n)] print(min(out)) ''' l=list(range(8-1,-1,-1)) print(l) '''