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];
  }
}
posted @ 2023-12-08 10:34  CrossAutomaton  阅读(14)  评论(0编辑  收藏  举报