有 n
名人员在一个营地,他们需要使用一艘船过河到达目的地。这艘船一次最多可以承载 k
人。渡河过程受到环境条件的影响,这些条件以 周期性 的方式在 m
个阶段内变化。
每个阶段 j
都有一个速度倍率 mul[j]
:
mul[j] > 1
,渡河时间会变长。mul[j] < 1
,渡河时间会缩短。每个人 i
都有一个划船能力,用 time[i]
表示,即在中性条件下(倍率为 1 时)单独渡河所需的时间(以分钟为单位)。
规则:
j
出发的一组人 g
渡河所需的时间(以分钟为单位)为组内成员的 最大 time[i]
,乘以 mul[j]
。d
,阶段会前进 floor(d) % m
步。r
,返回所需时间为 time[r] × mul[current_stage]
,记为 return_time
,阶段会前进 floor(return_time) % m
步。返回将所有人渡河所需的 最少总时间 。如果无法将所有人渡河,则返回 -1
。
示例 1:
输入: n = 1, k = 1, m = 2, time = [5], mul = [1.0,1.3]
输出: 5.00000
解释:
5 × 1.00 = 5.00
分钟。5.00
分钟。示例 2:
输入: n = 3, k = 2, m = 3, time = [2,5,8], mul = [1.0,1.5,0.75]
输出: 14.50000
解释:
最佳策略如下:
max(2, 8) × mul[0] = 8 × 1.00 = 8.00
分钟。阶段前进 floor(8.00) % 3 = 2
步,下一个阶段为 (0 + 2) % 3 = 2
。2 × mul[2] = 2 × 0.75 = 1.50
分钟。阶段前进 floor(1.50) % 3 = 1
步,下一个阶段为 (2 + 1) % 3 = 0
。max(2, 5) × mul[0] = 5 × 1.00 = 5.00
分钟。阶段前进 floor(5.00) % 3 = 2
步,最终阶段为 (0 + 2) % 3 = 2
。8.00 + 1.50 + 5.00 = 14.50
分钟。示例 3:
输入: n = 2, k = 1, m = 2, time = [10,10], mul = [2.0,2.0]
输出: -1.00000
解释:
-1.00
。
提示:
1 <= n == time.length <= 12
1 <= k <= 5
1 <= m <= 5
1 <= time[i] <= 100
m == mul.length
0.5 <= mul[i] <= 2.0