1
var maxScore = function (nums) {7
const memo = new Map();9
function recurse(arr, num1, op) {10
if (!arr.length) return 0;12
const key = arr.join() + num1;13
if (memo.has(key)) return memo.get(key);17
for (let i = 0; i < arr.length; i++) {18
const nextArr = [...arr.slice(0, i), ...arr.slice(i + 1)];21
const currGCD = gcd(num1, arr[i]);22
const rest = recurse(nextArr, null, op + 1);23
max = Math.max(max, op * currGCD + rest);25
const rest = recurse(nextArr, arr[i], op);26
max = Math.max(max, rest);32
return recurse(nums, null, 1);