灌水区神犇多
  • 板块灌水区
  • 楼主Lantern_LZY
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/13 14:57
  • 上次更新2023/11/3 04:05:59
查看原帖
灌水区神犇多
894765
Lantern_LZY楼主2023/8/13 14:57

描述

设有由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

python求解(不用考虑时间)
如果可以实现输出最长单调上升子序列也行
以下是本人代码
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=[]
2023/8/13 14:57
加载中...