Leetcode: 2172. Maximum AND Sum of Array

Problem Statement

from typing import List
from functools import cache


class Solution:
    def maximumANDSum(self, nums: List[int], numSlots: int) -> int:
        N = len(nums)
        ans = float("-inf")

        @cache
        def dfs(i, f, s):
            if i == N:
                return 0
            ans = float("-inf")
            for j in range(numSlots):
                c = nums[i] & (j + 1)
                if f & (1 << j) == 0:
                    ans = max(ans, c + dfs(i + 1, f | (1 << j), s))
                elif s & (1 << j) == 0:
                    ans = max(ans, c + dfs(i + 1, f, s | (1 << j)))
            return ans

        return dfs(0, 0, 0)


assert Solution().maximumANDSum([1, 2, 3, 4, 5, 6], 3) == 9
assert Solution().maximumANDSum([1, 3, 10, 4, 7, 1], 9) == 24
class Solution:
    def maximumANDSum(self, nums: List[int], numSlots: int) -> int:
        N = len(nums)

        @cache
        def dfs(i, used):
            if i == N:
                return 0

            ans = 0
            cur = used
            b = 1
            for k in range(1, numSlots + 1):
                slot = cur % 3
                cur = cur // 3
                if slot < 2:
                    ans = max(ans, (nums[i] & k) + dfs(i + 1, used + b))
                b = b * 3
            return ans

        return dfs(0, 0)