题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
#使用了两个dp列表来存储状态
#我很厉害,非常有长进,从一开始不会动态规划,到现在可以解决这个问题了!
n=int(input())
s=[int(x) for x in input().split()]
dp1=[1]*n
dp2=[0]*n
#从后往前,看这个人右边最多能站几个人
for i in range(n)[::-1]:
for j in range(i,n)[::-1]:
if s[i]>s[j] and dp1[j]+1>dp1[i]:
dp1[i]=dp1[j]+1
# if s[i]>s[j]:会超时
# dp1[i]=max(dp1[j]+1,dp1[i])
#从前往后,看这个人左边最多能站几个人
for i in range(n):
for j in range(i):
if s[i]>s[j] and dp2[j]+1>dp2[i]:
dp2[i]=dp2[j]+1
# if s[i]>s[j]:会超时
# dp2[i]=max(dp2[j]+1,dp2[i])
dp3 =list(map(lambda x: x[0] + x[1], zip(dp1, dp2)))
print(n-max(dp3))

