要求从序列A选m个元素,从B序列选n个元素,A和B元素个数相同,但远取的m和n个元素的下标不能相同,列出这m和n个元素的和,以及对应的下标,用字典打印出来
我的逻辑是用一个二进制表示,1表示选取,0表示没有选取
def fun_(A,m,B,n):
if len(A)!=len(B):
return
if m+n>len(A):
return
_len=len(A)
def fun(n):
bit_1_qty=str(bin(n)).count("1")
whl_length=_len
bit_1_=[]
i=whl_length
j=1
while n!=0:
if n-(n//2)*2==1:
i=whl_length-j
bit_1_.append(i)
n=n>>1
j+=1
return bit_1_qty,bit_1_
A_array={}
B_array={}
for i in range(2**_len-1):
if fun(i)[0]==m:
A_array[i]=fun(i)[1]
for j in range(2**_len-1):
if fun(j)[0]==n:
B_array[j]=fun(j)[1]
result={}
for A_key in A_array.keys():
sum_A_B=0
bit=[]
for A_i in A_array[A_key]:
sum_A_B+=A[A_i]
bit.append(A_i)
for B_key in B_array.keys():
if A_key & B_key==0:
for B_i in B_array[B_key]:
bit.append(B_i)
sum_A_B+=B[B_i]
result[sum_A_B]=bit
return result
A=[2,3,-5,3,6,-2]
B=[1,-3,7,2,-1,9]
a=fun_(A,3,B,2)
for i,j in a.items():
print(i,j)
你这是啥算法,算法叫什么
为什么把 fun 定义在 fun1 里面
你的算法题目呢