(Python)
定义a(n,v):
R=dict()#每个可达子集的索引为[card(s)-1][s]
对于范围(n)中的i:R[i]=dict()
对于范围(n)中的i:R[0][(v[i],)]={v[i]}
范围=设置(v)
对于范围(1,n)中的j:
对于范围((j+1)//2)中的i:
对于R[i]中的s1:
对于R[j-1-i]中的s2:
如果设置(s1)&设置(s2)==设置():
s12=元组(已排序(集合(s1)|集合(s2))
如果s12不在R[len(s12)-1]中:
R[长度(s12)-1][s12]=集()
对于R[i][s1]中的a:
对于R[j-1-i][s2]中的b:
允许=[a+b,a*b,a-b,b-a]
如果a=0和b%a==0:允许.append(b//a)
如果是b=0和a%b==0:允许.append(a//b)
R[len(s12)-1][s12].update(允许)
reach.update(允许)
k=1
当达到k时:k+=1
返回k
alst=[1]
[范围(1,8)中n的附加(a(n,alst))]
|