See 线性 DP,附相似题目(Python/Java/C++/Go)
2830. Maximize the Profit as the Salesman
1 2 3 4 5 6 7 8 9 10 11
| class Solution: def maximizeTheProfit(self, n: int, offers: List[List[int]]) -> int: groups = [[] for _ in range(n)] for start, end, gold in offers: groups[end].append((start, gold)) f = [0] * (n + 1) for end, g in enumerate(groups): f[end + 1] = f[end] for start, gold in g: f[end + 1] = max(f[end + 1], f[start] + gold) return f[n]
|
2008. Maximum Earnings From Taxi
1 2 3 4 5 6 7 8 9 10 11
| class Solution: def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int: groups = [[] for _ in range(n)] for start, end, tip in rides: groups[end - 1].append((start - 1, end - start + tip)) f = [0] * (n + 1) for end, g in enumerate(groups): f[end + 1] = f[end] for start, profit in g: f[end + 1] = max(f[end + 1], f[start + 1] + profit) return f[n]
|
1235. Maximum Profit in Job Scheduling
1 2 3 4 5 6 7 8
| class Solution: def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int: jobs = sorted(zip(endTime, startTime, profit)) f = [0] * (len(jobs) + 1) for i, (_, st, p) in enumerate(jobs): j = bisect_right(jobs, (st, inf), hi=i) f[i + 1] = max(f[i], f[j] + p) return f[-1]
|
1751. Maximum Number of Events That Can Be Attended II
1 2 3 4 5 6 7 8 9 10
| class Solution: def maxValue(self, events: List[List[int]], k: int) -> int: events.sort(key=lambda e: e[1]) n = len(events) f = [[0] * (k + 1) for _ in range(n + 1)] for i, (start, end, val) in enumerate(events): p = bisect_left(events, start, hi=i, key=lambda e: e[1]) for j in range(1, k + 1): f[i + 1][j] = max(f[i][j], f[p][j - 1] + val) return f[n][k]
|
2054. Two Best Non-Overlapping Events
1 2 3 4 5 6 7 8 9 10
| class Solution: def maxTwoEvents(self, events: List[List[int]]) -> int: events.sort(key=lambda e: e[1]) n = len(events) f = [[0] * 3 for _ in range(n + 1)] for i, (start, end, val) in enumerate(events): p = bisect_left(events, start, hi=i, key=lambda e: e[1]) for j in range(1, 3): f[i + 1][j] = max(f[i][j], f[p][j - 1] + val) return f[-1][2]
|