Skip to content

Latest commit

 

History

History
 
 

2008.Maximum-Earnings-From-Taxi

2008.Maximum-Earnings-From-Taxi

此题和1235.Maximum-Profit-in-Job-Scheduling一模一样。

解法1:

考虑到地点的数目不超过1e5,所以我们可以设计dp[i]表示达到地点i所能得到的最大收益。dp[i]的来源有两种可能:第一种就是出租车从位置i-1空载而来,那么dp[i]=dp[i-1]。第二种就是有乘客在位置i下车,那么我们会额外获取一笔利润,这笔钱取决于这趟载客的行程。假设这趟载客的行程是从位置j开往i、收益为gain,那么我们关心的就会是在位置j时的最大收益dp[j],因此位置i的最大收益就是dp[i] = dp[j]+gain

注意可能会有多个生意都在i下客,即有多个可能的j,所以dp[i]会取最大值。最终答案就是返回最后一个地点的dp[n-1].

解法2:

如果n的个数远远超过1e5,dp[i]设计为关于位置的函数就会造成MLE. 事实上我们并不关心所有位置的最大收益。只有在每个订单下客的位置我们才可能会有新的收益,所有我们只关心那些下客点的位置。

我们将所有的生意按照下客位置排序。我们依然可以用类似的思想,但是dp[i]对应的是到达rides[i][1]位置的最大收益。在这个位置的最大收益同样有两种可能:从上一个下客位置空载而来,即dp[i]=dp[i-1]。或者我们接手了一笔生意从位置rides[i][0]开到了rides[i][1]。于是我们关心的是在这笔生意的上客地点start = rides[i][0]时的最大收益是多少。由于start不见得恰好是一个下客位置,所以我们可能需要往前推,定位到rides里最后一个不晚于start的下客地点j。那么就可以更新dp[i] = dp[j]+gain.

最终答案就是返回最后一笔生意的下客地点的dp[m-1].