题目链接:1601. 最多可达成的换楼请求数目
暴力方法。注意到原请求列表里面最多有 16 个请求,暴力在 $2^{16}$ 个可选方案中寻找到最多可达成的请求数目。
from typing import List
class DeltaCounter:
def __init__(self, n: int):
self.__data = [0] * n
self.__zeros = n
def inc(self, key):
self.__zeros -= self.__data[key] == 0
self.__data[key] += 1
self.__zeros += self.__data[key] == 0
def dec(self, key):
self.__zeros -= self.__data[key] == 0
self.__data[key] -= 1
self.__zeros += self.__data[key] == 0
def zeros(self) -> int:
return self.__zeros
class Solution:
def maximumRequests(self, n: int, requests: List[List[int]]) -> int:
ret = 0
for plan in range(2 ** len(requests)):
if plan.bit_count() <= ret:
continue
dc, num = DeltaCounter(n), 0
for i, (fro, to) in enumerate(requests):
if ((1 << i) & plan) != 0:
num += 1
dc.inc(to)
dc.dec(fro)
if dc.zeros() == n:
ret = max(ret, num)
return ret