Maximum Number of Groups Getting Fresh Donuts LeetCode solution in C++
1class Solution {2typedef long long ll;3#define vi(x) vector<x>4public:5unordered_map<string, ll> dp;6string s;7ll func(ll rem) {8if (dp.find(s) == dp.end()) {9dp[s] = -1;10}11ll &ans = dp[s];12if (ans == -1) {13ans = 0;14ll bs = s.size();15for (ll i = 1; i < bs; ++i) {16if (s[i] > '0') {17--s[i];18ans = max(ans, func((bs + rem - i) % bs) + !rem);19++s[i];20}21}22}23return ans;24}25int maxHappyGroups(int bs, vector<int> &v) {26s.assign(bs, '0');27ll ans = 0;28for (ll it : v) {29if (it % bs == 0) {30++ans;31} else if (s[bs - it % bs] > '0') {32++ans;33--s[bs - it % bs];34} else {35++s[it % bs];36}37}38return ans + func(0);39}40};