2 solutions
-
0
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