本题可抽象为**加权区间调度(Weighted Interval Scheduling)**问题:
[s, e),其权重(收益)为 e − s(乘车距离)。end_i ≤ start_j(半开区间,端点相接不算重叠,如样例 1 中 [0,3] 与 [3,8] 可同时选)。由于区间权重恰好等于其长度,一个常见的错误思路是「贪心选最早结束 / 选最长区间」。这两种贪心在带权场景下都会失败(见下方 hack 分析),因此必须使用动态规划。
小明自驾回家,为节省旅途成本,决定在网上挂出顺风车服务,有需要的乘客可自行申请服务,由小明决定谁能搭乘顺风车。
请你设计一个程序帮助小明将顺风车利益最大化,并返回最大的顺风车收益。
具体细节如下:
输入
10,[[0,3],[1,4],[3,8],[5,10]]
输出
8
说明
解释:
最优选择方案:
最大收益为 8 元。
输入
10,[[0,5],[1,2],[3,6],[5,8],[6,10]]
输出
9
说明
解释:
最优选择方案:选择乘客 1 [0,5] 和乘客 5 [6,10],总收益 5 + 4 = 9 元。
输入
20,[[0,5],[5,10],[10,15]]
输出
15
说明
解释:三个乘客完全不重叠,可以全部选择,收益 5 + 5 + 5 = 15 元。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册