与えられたリストからk要素のセットされたビットの合計の最大値を見つけるのに問題があります。指定されたリストの任意のk要素のmax(sum(count(set bits)))を見つけるには
は考える:
n = 4 # length of list
k = 2 # choose only k elements of list whose count(sum(set bits)) is max
list l= 6 2 1 0
を私はそれぞれ2および1セットビットで番号6( 0)と1(00 )を選択した場合ので、それらを追加することは私にセットされたビットの最大数を与えますすなわち、私が試したどのような3
です:私の問題はラインである
from itertools import combinations
s = list(map(int,raw_input().split()))
n = s[0]
k = s[1]
l = list(map(int,raw_input().split()))
comb = list(combinations(l, k))
# print comb
ad = []
for i in comb:
x = bin(i[0])[2:].count('1')+bin(i[1])[2:].count('1')
ad.append(x)
# print ad
print max(ad)
:K = 2として
x = bin(i[0])[2:].count('1')+bin(i[1])[2:].count('1')
、私はこれを手動で取ったI [0]とi [1]。 これを行う方法動的に。
また、私のリストサイズは2〜10^18まで変化する可能性があるので、リストの理解を使用しないで、の回答を探しています。
他のロジックを提案できる場合は、非常に便利です。
感謝:
その後、あなたは他の回答のように設定されたビットの合計を計算することができます。リストの範囲がより大きい場合には時間がかかりますので、リストの理解を使わずに他のロジックを提案できますか? –
リストのサイズはk = 2です。 forループを使用して行うこともできますが、リスト内包よりは高速ではありません – mozzafunk