2024年11月5日 星期二

暴力解Lis

 a = 'abc'

#取得所有二進位

t = []

for i in range(8):

  t.append(f'{i:03b}')


#是1的就輸出字元

for j in t:

  # print(j)

  s = ''

  for k in range(3):

    if j[k]=='1':

      # print(a[k])

      s+=a[k]

  # print(s)

  

#改為求子集通式


a = 'abcd'

n = len(a)

#取得所有二進位

t = []

for i in range(2**n):

  t.append(f'{i:{n}b}')

  


#是1的就輸出字元

ss = []

for j in t:

  s = ''

  for k in range(n):

    if j[k]=='1':

      # print(a[k])

      s+=a[k]

  ss.append(s)

# print(ss)




#應用:利用求子集通式解lis

def checkasc(sa):

  for i in range(1,len(sa)):

    if not(sa[i-1]<sa[i]):return False

  return True

  

a = [1,3,5,6,9,8,6,4,2]

n = len(a)

#取得所有二進位

t = []

for i in range(2**n):

  t.append(f'{i:{n}b}')

  


#是1的就輸出字元

ss = []

for j in t:

  s = []

  for k in range(n):

    if j[k]=='1':

      # print(a[k])

      s.append(a[k])

  ss.append(s)

# print(ss)


sss = []

for i in ss:

  if checkasc(i):

    sss.append(i)

# print(sss)


lsss = [len(i) for i in sss]

rlsss = [i for i in sss if len(i)==max(lsss)]

print(max(lsss))

print(rlsss)

沒有留言:

張貼留言