2008. 出租车的最大盈利
2008. 出租车的最大盈利
2023年12月8日
解析
动态规划基础题
注意数据范围,dp
数组需要long
。
对于每一个点\(i\),我们可以知道,其可以由空车状态\(i-1\)转移过来,也可以由\(end_j=i\)的\(start_j\)转移过来。
故我们可以得出递推公式:
\(dp[i]=\max(dp[i-1],\max_j\{dp[start[j]]+i-start[j]+tips[j]\})\)
其中我们可以对redis
中的\(end_i\)进行分组,并将价值保存。
之后循环递推即可
代码
class Solution {
public long maxTaxiEarnings(int n, int[][] rides) {
long dp[] = new long[n + 1];
List<int[]>[] groups = new ArrayList[n + 1];
for (int[] r : rides) {
if (groups[r[1]] == null) {
groups[r[1]] = new ArrayList<>();
}
groups[r[1]].add(new int[] { r[0], r[1] - r[0] + r[2] });
}
for (int i = 1; i <= n; i++) {
dp[i] = dp[i - 1];
if (groups[i] != null) {
for (int[] group : groups[i]) {
dp[i] = Math.max(dp[i], group[1] + dp[group[0]]);
}
}
}
return dp[n];
}
}