Maximize Score After N Operations LeetCode solution in Python
1# Runtime: 6454 ms (Top 9.35%) | Memory: 24.7 MB (Top 37.40%)2from functools import lru_cache345class Solution:6def maxScore(self, nums: List[int]) -> int:7def gcd(a, b):8while a:9a, b = b % a, a10return b1112halfplus = len(nums) // 2 + 11314@lru_cache(None)15def dfs(mask, k):16if k == halfplus:17return 018res = 019for i in range(len(nums)):20for j in range(i + 1, len(nums)):21if not (mask & (1 << i)) and not (mask & (1 << j)):22res = max(23res,24k * gcd(nums[i], nums[j])25+ dfs(mask | (1 << i) | (1 << j), k + 1),26)27return res2829return dfs(0, 1)