#全部最大上升子序列#思路:fir保存前lis前n个数的最长子序列,sec保存前n个数的第二长子序列,则下一次的最长子序列是上一次fir加上lis[i]def maxup(lis): cur=1 fir=[[lis[0]]] sec=[[]] n=len(lis) while cur<n: fir_tmp=[] sec_tmp=[] tir_tmp=[] for i in fir: if i[len(i)-1]<=lis[cur]: s=i[0:] s.append(lis[cur]) fir_tmp.append(s) sec_tmp.append(i) for i in sec: if len(i)==0 or i[len(i)-1]<=lis[cur]: t=i[0:] t.append(lis[cur]) sec_tmp.append(t) tir_tmp.append(i) if fir_tmp: # print("fir_tmp has element") fir=fir_tmp sec=sec_tmp # print("fir for:", fir, "sec:", sec) else: # print("fir_tmp no element") fir=sec_tmp sec=tir_tmp # print("fir for:", fir, "sec:", sec) cur+=1 return fir#测试:lis="""2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 50 49 52 51 54 53 56 55 58 57 60 59 62 61 64 63 66 65 68 67 70 69 72 71 74 73 76 75 78 77 80 79 82 81 84 83 86 85 88 87 90 89 92 91 94 93 96 95 98 97 100 99""" x=lis.split(" ") t1=time.clock() res=maxup(x) t2=time.clock() print(len(res),t2-t1)