题解 | #合唱队#

合唱队

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))

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务