题解 | #合唱队#

合唱队

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

while 1:
    try:
        def forwardLIS(nums):
            n = len(nums)
            L = [1] * n
            for i in reversed(range(n)):
                for j in range(i+1, n):
                    if nums[i] > nums[j]:
                        L[i] = max(L[i], L[j] + 1)
            return L

        def backwardLIS(nums):
            n = len(nums)
            L = [1] * n
            for i in range(n):
                for j in reversed(range(i)):
                    if nums[i] > nums[j]:
                        L[i] = max(L[i], L[j] + 1)
            return L

        def minDrop(nums):
            a = forwardLIS(nums)
            b = backwardLIS(nums)
            return len(nums) - max(a[i] + b[i] for i in range(len(nums))) + 1
        
        m = int(input())
        nums = list(map(int, input().split()))
        print(minDrop(nums))
    except:
        break
全部评论

相关推荐

码农顶针:估计让你免费辅导老板孩子的学习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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