2 solutions

  • 0
    @ 2022-3-26 16:27:29
    N = int(input())
    n = [int(i) for i in input().split(' ')]
    k = 0
    def f1(nums):
        if not nums:
            return 0,[]
        dp = []
        for i in range(len(nums)):
            dp.append(1)
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j] + 1)
        q = dp[0]
        t = [nums[0]]
        for i in range(1, len(nums)):
            if q < dp[i]:
                q = dp[i]
                t = [nums[i]]
            elif q == dp[i] and nums[i] not in t:
                t.append(nums[i])
        return q, t
    
    def f2(nums):
        d = []
        if not nums:
            return 0,[]
        dp = []
        for i in range(len(nums)):
            dp.append(1)
            d.append(nums[i])
            for j in range(i):
                if nums[i] < nums[j]:
                    if dp[i] < dp[j] + 1:
                        dp[i] = dp[j] + 1
                        d[i]=d[j]
        q = dp[0]
        t = [d[0]]
        for i in range(1,len(nums)):
            if q < dp[i]:
                q = dp[i]
                t = [d[i]]
            elif q == dp[i] and d[i] not in t:
                t.append(d[i])
        return q, t
    for i in range(N):
        max1,p1 = f1(n[:i])
        max2,p2 = f2(n[i:])
        if len(p1) == 1 and len(p2) == 1 and p1[0] == p2[0]:
            k = max(max1+max2-1,k)
        else:
            k = max(max1+max2, k)
    print(N-k)
    

    DP动态规划

    Information

    ID
    615
    Time
    1000ms
    Memory
    16MiB
    Difficulty
    8
    Tags
    # Submissions
    16
    Accepted
    5
    Uploaded By