HJ24 合唱队
同基础版
300.最长递增子序列
最长递增子序列
动态规划
这里是最基础的实现 通俗易懂
## 最长递增子序列的变形
## 思路就是动态规划 拿到最长递增子序列的记录
# 8
# 186 186 150 200 160 130 197 200
# dp1 [1, 1, 1, 2, 2, 1, 3, 4]
# dp2 [3, 3, 2, 3, 2, 1, 1, 1]
# L [4, 4, 3, 5, 4, 2, 4, 5]
# max(L)-1 = 4 N-4 = 4
N= int(input())
nums = list(map(int,input().split()))
def func(N,nums):
## 初始化 从左到右遍历递增子序列的记录
dp1 = [1]*N
for i in range(1,N):
for j in range(0,i):
if nums[i] >nums[j]:
dp1[i] = max(dp1[i],dp1[j]+1)
return dp1
left = func(N,nums)
right = func(N,nums[::-1])[::-1]
L = max([left[i]+right[i] for i in range(N)])-1
print(right,N-L)