50
10
40
70
[0][1][2][3]
dp
·
·
·
·
[0][1][2][3]
DP after sorting by end time
▸1sort jobs by end time2dp = array of size n3for i in 0..n−1:4 p = latest j with end[j] <= start[i] // binary search5 skip = dp[i−1] // (0 if i==0)6 take = profit[i] + (p>=0 ? dp[p] : 0)7 dp[i] = max(skip, take)8return dp[n−1]
state
- jobs (by end)job0 [1,3] $50 job1 [2,4] $10 job2 [3,5] $40 job3 [3,6] $70
- recurrencedp[i] = max(dp[i−1], profit[i] + dp[p(i)])