Maximum Number of Groups Getting Fresh Donuts LeetCode solution in Python
1class Solution:2def maxHappyGroups(self, B, groups):3ans = sum(g % B == 0 for g in groups)4groups = [g for g in groups if g % B != 0]56pos = [0] * B7for g in groups:8pos[g % B] += 1910for i in range(1, B):11t = min(pos[i], pos[B - i]) if 2 * i != B else pos[i] // 212ans += t13pos[i] -= t14pos[B - i] -= t1516if sum(pos) == 0:17return ans1819@lru_cache(None)20def dfs(position, last):21if sum(position) == 0:22return 02324ans = float("-inf")25for i in range(B):26if position[i] > 0:27t = [j for j in position]28t[i] -= 129U = (last - i) % B30ans = max(ans, dfs(tuple(t), U) + (U == 0))3132return ans3334return max(dfs(tuple(pos), i) for i in range(1, B)) + ans