Use this to learn the idea, then write your own version.
1class Solution {2 public:3 int getMaxGridHappiness(int m, int n, int introvertsCount,4 int extrovertsCount) {5 const int twoToThePowerOfN = pow(2, n);6 vector<vector<vector<vector<vector<int>>>>> mem(7 m * n, vector<vector<vector<vector<int>>>>(8 twoToThePowerOfN,9 vector<vector<vector<int>>>(10 twoToThePowerOfN,11 vector<vector<int>>(introvertsCount + 1,12 vector<int>(extrovertsCount + 1)))));13 return getMaxGridHappiness(m, n, 0, 0, 0, introvertsCount, extrovertsCount,14 mem);15 }16 17 private:18 19 20 21 22 23 24 25 26 int getPlacementCost(int n, int i, int j, int inMask, int exMask, int diff) {27 int cost = 0;28 if (i > 0) {29 if ((1 << (n - 1)) & inMask)30 cost += diff - 30;31 if ((1 << (n - 1)) & exMask)32 cost += diff + 20;33 }34 if (j > 0) {35 if (1 & inMask)36 cost += diff - 30;37 if (1 & exMask)38 cost += diff + 20;39 }40 return cost;41 }42 43 int getMaxGridHappiness(int m, int n, int pos, int inMask, int exMask,44 int inCount, int exCount,45 vector<vector<vector<vector<vector<int>>>>>& mem) {46 47 48 49 50 51 const int i = pos / n;52 const int j = pos % n;53 if (i == m)54 return 0;55 if (mem[pos][inMask][exMask][inCount][exCount] > 0)56 return mem[pos][inMask][exMask][inCount][exCount];57 58 const int shiftedInMask = (inMask << 1) & ((1 << n) - 1);59 const int shiftedExMask = (exMask << 1) & ((1 << n) - 1);60 61 const int skip = getMaxGridHappiness(m, n, pos + 1, shiftedInMask,62 shiftedExMask, inCount, exCount, mem);63 const int placeIntrovert =64 inCount > 065 ? 120 + getPlacementCost(n, i, j, inMask, exMask, -30) +66 getMaxGridHappiness(m, n, pos + 1, shiftedInMask | 1,67 shiftedExMask, inCount - 1, exCount, mem)68 : INT_MIN;69 const int placeExtrovert =70 exCount > 0 ? 40 + getPlacementCost(n, i, j, inMask, exMask, 20) +71 getMaxGridHappiness(m, n, pos + 1, shiftedInMask,72 shiftedExMask | 1, inCount,73 exCount - 1, mem)74 : INT_MIN;75 return mem[pos][inMask][exMask][inCount][exCount] =76 max({skip, placeIntrovert, placeExtrovert});77 }78};79