2025年6月15日 星期日

lcs and lis

 p = [10,20,30,80,90,40,50,60]

q = sorted(p)[:-3]

n = len(p)

m = len(q)

print(p)

print(q)


d = [[0]*(m+1) for _ in range(n+1)]

for i in range(1,n+1):

  for j in range(1,m+1):

    if p[i-1]==q[j-1]:

      d[i][j]=d[i-1][j-1]+1

    else: d[i][j]=max(d[i-1][j],d[i][j-1])


lcs = []

i,j = n,m

while i>0 and j >0:

  if p[i-1]==q[j-1]:

    lcs.append(str(p[i-1]))

    i-=1

    j-=1

  elif d[i-1][j]>d[i][j-1]:

    i-=1

  else:

    j-=1

lcs.reverse()

print(d[n][m])

print(' '.join(lcs))


Output:


[10, 20, 30, 80, 90, 40, 50, 60]

[10, 20, 30, 40, 50]

5

10 20 30 40 50

沒有留言:

張貼留言