當前位置:成語大全網 - 書法字典 - 解決了NOIP推廣組前幾年的壹個補充問題

解決了NOIP推廣組前幾年的壹個補充問題

因為輸出是有序的,所以這個問題等價於取排列好的1,2,3,...,n,可以通過壹些組合算法來求解。妳的輸出我沒看懂(好像是安排好的,不是按順序)。我只寫了python版的組合生成算法,本質是利用n中取m的特性用[0,1,1,0的結構]表示選擇了哪m個數,算法是反求第壹個1,0,交換1和0的位置得到下壹個排列。我在下面貼了python版本的代碼-

使用妳的問題的方法是組合([1,2,3,...,n],m)。

定義組合(lst,k):

is _ in =[1]* k+[0]*(len(lst)-k)

top_begin,top_end = 0,len(lst)-k

L = len(lst)

while top_begin!= top_end:

_combination = tuple([x for x,y in zip(lst,is_in) if y == 1])

產量_組合

對於範圍內的I(L-1,0,-1):

如果is_in[i-1] == 1且is_in[i] == 0:

leftOnes = sum(is_in[i :])

is _ in = is _ in[:I-1]+[0]+[1]*(left ones+1)+[0]*(L-I-left ones-1)

top _ begin+= int(is _ in[top _ begin]!= 1)

破裂

yield tuple(lst[-k :])