4
unordered_map<int, unordered_map<int, unordered_map<int, int>>> dp;6
int Solve(vector<vector<int>> &events, int start, int n, int k, int endtime) {7
if (k == 0 || start == n) {11
if (dp.find(start) != dp.end() && dp[start].find(k) != dp[start].end() &&12
dp[start][k].find(endtime) != dp[start][k].end()) {13
return dp[start][k][endtime];16
if (events[start][0] > endtime) {17
t1 = events[start][2] + Solve(events, start + 1, n, k - 1, events[start][1]);20
int t2 = Solve(events, start + 1, n, k, endtime);22
dp[start][k][endtime] = max(t1, t2);23
// cout<< dp[start][k][endtime]<<endl;25
return dp[start][k][endtime];27
int maxValue(vector<vector<int>> &events, int k) {30
// sort according to start time31
sort(events.begin(), events.end(), [](vector<int> &a, vector<int> &b) { return a[0] < b[0]; });33
return Solve(events, 0, events.size(), k, 0);