1
/* Note: This code results in a Timeout. */6
int compute(const vector<int> &price, const vector<vector<int>> &offers, int needs) {7
if (dp[needs] != -1) return dp[needs];8
// Compute the min cost to satisfy these needs9
int best{}, new_needs, i;10
for (int i = 0; i < n; i++) {11
c = ((needs >> (i * 4)) & 0xf);14
if (best == 0) return 0;15
for (const vector<int> &offer : offers) {17
for (i = 0; i < n; i++) {18
c = ((needs >> (i * 4)) & 0xf);20
new_needs |= ((c - offer[i]) << (i * 4));24
if (i == n) best = min(best, compute(price, offers, new_needs) + offer.back());26
return dp[needs] = best;28
int shoppingOffers(vector<int> &price, vector<vector<int>> &special, vector<int> &needs) {29
dp.resize((1 << 24) + 10, -1);32
for (int i = 0; i < n; i++) needs_hash |= ((needs[i]) << (i * 4));33
return compute(price, special, needs_hash);