题解 | #合唱队#

合唱队

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

以某个点i为中心,计算0~i的最长上升子序列x,然后翻转列表,计算N~i的最长子序列y,则以i点为中心需要出列的人数为N-(x+y-1),最后取每个点的最小值

def max_up_arr(arr):
    """查找arr中以i为结尾的最大上升子序列长度"""
    dp = [1]  # 默认为1个
    for i in range(1, len(arr)):
        dp.append(max([1] + [dp[j]+1 for j in range(i) if arr[j] < arr[i]]))
    return dp 

def func(n, arr):
    a1 = max_up_arr(arr)
    a2 = max_up_arr(arr[::-1])[::-1]
    print(n-max(i+j-1 for i, j in zip(a1, a2)))

while True:
    try:
        n = int(input())
        arr = list(map(int, input().split()))
        func(n, arr)
    except EOFError: break 
全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
评论
2
1
分享
牛客网
牛客企业服务