class Solution {
public:
vector<pair<int, int>> vp;
int cached[1001];
int dp(int idx) {
int& ret = cached[idx+1];

if(ret == 0) {
for(int i = idx + 1; i < vp.size(); i++) {
if(idx == -1 || vp[idx].second <= vp[i].second)
ret = max(ret, dp(i) + vp[i].second);
}
}
return ret;
}

int bestTeamScore(vector<int>& scores, vector<int>& ages) noexcept {
int size = ages.size();
vp = vector<pair<int, int>>(size);
for(int i = 0 ; i < size; i++) {
vp[i] = {ages[i], scores[i]};
}
sort(vp.begin(), vp.end());
memset(cached, 0, sizeof cached);

return dp(-1);
}
};

재귀 dp
재밌음