描述
设有由n个不相同的整数组成的数列,记为:b(1),b(2),……,b(n)且b(i)!=b(j)(i!=j),若存在i1<i2<i3<……<ie且有b(i1)<b(i2)<……<b(ie),则称为长度为 e 的单调上升序列。
输入描述
输入仅一行包含 n 个 int 范围内的数(n<=1000),表示待计算的数列
输出描述
输出第一行表示最长单调上升子序列的长度
第二行为最长单调上升子序列,如果有多个,则输出第一个数列(每个数后面有一个空格)
用例输入 1
13 7 9 16 38 24 37 18 44 19 21 22 63 15
用例输出 1
max=8 7 9 16 18 19 21 22 63
nums=list(map(int,input().split()))
def long(nums):
if not nums:
return 0
dp=[1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[i]>nums[j]:
dp[i]=max(dp[i],dp[j]+1)
return dp
dp=long(nums)
m=str(max(dp))
print("max="+m)
m=int(m)
now=[]
for i in range(1,m+1):
for j in range(0,len(dp)):
if dp[j]>i:
break
if dp[j]==i:
now.append(nums[j])
print(now[-1],end=' ')
now=[]