[1751. Maximum Number of Events That Can Be Attended II](https://leetcode.com/problems/maximum-number-of-events-that-can-be-attended-ii/) ### 題目描述 You are given an array of `events` where `events[i] = [startDayi, endDayi, valuei]`. The i^th^ event starts at `startDayi` and ends at `endDayi`, and if you attend this event, you will receive a value of `valuei`. You are also given an integer `k` which represents the maximum number of events you can attend. You can only attend one event at a time. If you choose to attend an event, you must attend the **entire** event. Note that the end day is inclusive: that is, you cannot attend two events where one of them starts and the other ends on the same day. Return *the **maximum sum** of values that you can receive by attending events.* ### 範例 **Example 1:** ![](https://assets.leetcode.com/uploads/2021/01/10/screenshot-2021-01-11-at-60048-pm.png =80%x) ``` Input: events = [[1,2,4],[3,4,3],[2,3,1]], k = 2 Output: 7 Explanation: Choose the green events, 0 and 1 (0-indexed) for a total value of 4 + 3 = 7. ``` **Example 2:** ![](https://assets.leetcode.com/uploads/2021/01/10/screenshot-2021-01-11-at-60150-pm.png =80%x) ``` Input: events = [[1,2,4],[3,4,3],[2,3,10]], k = 2 Output: 10 Explanation: Choose event 2 for a total value of 10. Notice that you cannot attend any other event as they overlap, and that you do not have to attend k events. ``` **Example 3:** ![](https://assets.leetcode.com/uploads/2021/01/10/screenshot-2021-01-11-at-60703-pm.png =80%x) ``` Input: events = [[1,1,1],[2,2,2],[3,3,3],[4,4,4]], k = 3 Output: 9 Explanation: Although the events do not overlap, you can only attend 3 events. Pick the highest valued three. ``` **Constraints**: * 1 <= `k` <= `events.length` * 1 <= `k` * `events.length` <= 10^6^ * 1 <= `startDayi` <= `endDayi` <= 10^9^ * 1 <= `valuei` <= 10^6^ ### 解答 #### Python ```python= class Solution: def maxValue(self, events: List[List[int]], k: int) -> int: n = len(events) events.sort() @cache def dfs(i, cur, k): if k == 0: return 0 while i < n and events[i][0] <= cur: i += 1 best = 0 for j in range(i, n): best = max(best, events[j][2] + dfs(j + 1, events[j][1], k-1)) return best return dfs(0, 0, k) ``` > [name=Yen-Chi Chen][time=Mon, Jul 17, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)