5
int solve(int i, int currPeople, int currProfit, int totalP, int minProfit, vector<int> &group,7
if (i == profit.size()) {8
if (currProfit >= minProfit and totalP >= currPeople) return 1;10
} else if (totalP < currPeople)13
if (dp[i][currPeople][currProfit] != -1) return dp[i][currPeople][currProfit];14
int include = 0, notInclude = 0;15
notInclude = solve(i + 1, currPeople, currProfit, totalP, minProfit, group, profit);16
include = solve(i + 1, currPeople + group[i], min(currProfit + profit[i], minProfit), totalP,17
minProfit, group, profit);18
return dp[i][currPeople][currProfit] = (include % mod + notInclude % mod) % mod;20
int profitableSchemes(int n, int minProfit, vector<int> &group, vector<int> &profit) {21
memset(dp, -1, sizeof(dp));22
return solve(0, 0, 0, n, minProfit, group, profit);