#4675. 规划兼职工作

规划兼职工作

题目描述

你打算利用空闲时间来做兼职工作赚些零花钱。

这里有 nn 份兼职工作,每份工作预计从 startTime[i]startTime[i] 开始到 endTime[i]endTime[i] 结束,报酬为 profit[i]profit[i]

给你一份兼职工作表,包含开始时间 startTimestartTime,结束时间 endTimeendTime 和预计报酬 profitprofit 三个数组,请你计算并返回可以获得的最大报酬。 注意,时间上出现重叠的 2 份工作不能同时进行。 如果你选择的工作在时间 XX 结束,那么你可以立刻进行在时间 XX 开始的下一份工作。

输入格式

第一行一个整数 nn

第二行 nn 个整数表示 startTimestartTime 数组;

第三行 nn 个整数表示 endTimeendTime 数组;

第四行 nn 个整数表示 profitprofit 数组;

示例 1:

示例1示意图

4
1 2 3 3
3 4 5 6
50 10 40 70
120

解释:

我们选出第 1 份和第 4 份工作,

时间范围是 [1-3]+[3-6],共获得报酬 120 = 50 + 70。

示例 2:

示例2示意图

5
1 2 3 4 6
3 5 10 6 9
20 20 100 70 60
150

解释:

我们选择第 1,4,5 份工作。

共获得报酬 150 = 20 + 70 + 60。

示例 3:

粘贴图片

3
1 1 1
2 3 4
5 6 4
6

提示:

  • $1 <= startTime.length == endTime.length == profit.length <= 5 * 10^5$
  • 1<=startTime[i]<endTime[i]<=1091 <= startTime[i] < endTime[i] <= 10^9
  • 1<=profit[i]<=1041 <= profit[i] <= 10^4