题解 | #合唱队形# Python3 + 简单解释

合唱队形

https://www.nowcoder.com/practice/0045cd3e39634a66ada63c2adeb49234

import sys
# 峰形队列其实是求 0~i的最长严格上升子序列 + i+1 ~0的最长严格下降子序列
# 求最少出列,就是求它俩相加最大

n = int(input())

height = list(map(int,input().strip().split()))

dp1 = [0] * n # dp[i]记录从0到i的最长上升序列
dp2 = [0] * n # dp2[i]记录从i到n的最长下降序列,或者从n到i的最长上升序列

dp1[0], dp2[n-1] = 1, 1

for i in range(1,n):
    max_num = 0
    for j in range(i):
        if height[j] < height[i]:
            max_num = max(max_num, dp1[j])
    dp1[i] = max_num+ 1

for i in range(n-2,-1,-1):
    max_num = 0
    for j in range(n-1,i,-1):
        if height[j] < height[i]:
            max_num = max(max_num, dp2[j])
    dp2[i] = max_num+ 1

res = [v1+v2-1 for v1, v2 in zip(dp1,dp2)]
print(n - max(res))





全部评论

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务