题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

n = int(input())
arr = str(input())
arr = arr.split(' ')
arr = [int(x) for x in arr]



def fectch_up_list(arr):
    dp = [ 1 for i in range(n)] # 最少就是自身了吧  
    sa = [ i for i in sorted(enumerate(arr), key = lambda x:x[1])]
    # print(sa)

    # i 表示采用i时,最多具有多少数量
    for i in range(0, n):
        
        id = sa[i][0]

        # if i > 0 and sa[i][1] == sa[i-1][1] and id > sa[i-1][0]:
        #     dp[id] = dp[sa[i-1][0]]
        #     continue

        # j 表示到当前j为止,最多具有多少数量
        for j in range(0, i):
            # if 
            idj = sa[j][0]
            if idj < id and sa[i][1] > sa[j][1]:
                dp[id] = max(dp[id], dp[idj]+1)

    return dp


dp1 = fectch_up_list(arr)
dp2 = fectch_up_list(list(reversed(arr)))
dp2 = list(reversed(dp2))

dp = []
for i in range(n):
    dp.append(dp1[i] + dp2[i])

# print(dp1, dp2, dp)

mx = max(dp[1:-1]) -1
ans = n - mx

print(ans)
# for i in range(1, n-1):
#     if dp[i] == mx:
#         if arr[i] > 








双向队列

全部评论

相关推荐

2025-11-29 17:56
门头沟学院 C++
点赞 评论 收藏
分享
2025-12-15 14:25
云南大学 Java
lei22:入职可能会看学信网,最好别伪装,这个简历找实习肯定是够的,肯定会有收 28 届实习生的公司的,多投就行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务