Untitled
unknown
plain_text
9 months ago
634 B
12
Indexable
import math
import functools
N = int(input())
a = list(map(int, input().split()))
mm = (1 << N) - 1
@functools.lru_cache(maxsize=1048578)
def get(mask):
if mask == 0:
return 0
rnd = N - bin(mask).count('1')
rnd = rnd // 2 + 1
ans = 0
elems = [i for i in range(N) if ((1 << i) & mask)]
for i1 in range(len(elems)):
for j1 in range(i1 + 1, len(elems)):
i = elems[i1]
j = elems[j1]
curr = math.gcd(a[i],a[j]) * rnd
new_mask = mask ^ ( 1<< i) ^ ( 1<< j)
ans = max(ans, curr + get(new_mask))
return ans
print(get(mm))
Editor is loading...
Leave a Comment