4
int bestTeamScore(vector<int> &scores, vector<int> &ages) {5
vector<vector<int>> grp;6
for (int i = 0; i < scores.size(); i++) {7
grp.push_back({scores[i], ages[i]});9
sort(grp.begin(), grp.end());10
memset(dp, -1, sizeof(dp));11
return recur(grp, 0, ages.size(), 0);14
int recur(vector<vector<int>> &grp, int i, int n, int maxiAge) {16
if (dp[i][maxiAge] != -1) return dp[i][maxiAge];17
// score is already greater than previous socre we need to check age18
// if current age is greater than previous maxiAge then two choices19
if (grp[i][1] >= maxiAge) {20
return dp[i][maxiAge] =21
max(grp[i][0] + recur(grp, i + 1, n, grp[i][1]), recur(grp, i + 1, n, maxiAge));23
return dp[i][maxiAge] = recur(grp, i + 1, n, maxiAge);