3385:破解锁的最少时间 II(★★)
目录
题目
Bob 被困在了一个地窖里,他需要破解 n 个锁才能逃出地窖,每一个锁都需要一定的 能量 才能打开。每一个锁需要的能量存放在一个数组 strength 里,其中 strength[i] 表示打开第 i 个锁需要的能量。
Bob 有一把剑,它具备以下的特征:
- 一开始剑的能量为 0 。
- 剑的能量增加因子
X一开始的值为 1 。 - 每分钟,剑的能量都会增加当前的
X值。 - 打开第
i把锁,剑的能量需要到达 至少strength[i]。 - 打开一把锁以后,剑的能量会变回 0 ,
X的值会增加 1。
你的任务是打开所有 n 把锁并逃出地窖,请你求出需要的 最少 分钟数。
请你返回 Bob 打开所有 n 把锁需要的 最少 时间。
示例 1:
输入:strength = [3,4,1]
输出:4
解释:
| 时间 | 能量 | X | 操作 | 更新后的 X |
|---|---|---|---|---|
| 0 | 0 | 1 | 什么也不做 | 1 |
| 1 | 1 | 1 | 打开第 3 把锁 | 2 |
| 2 | 2 | 2 | 什么也不做 | 2 |
| 3 | 4 | 2 | 打开第 2 把锁 | 3 |
| 4 | 3 | 3 | 打开第 1 把锁 | 3 |
无法用少于 4 分钟打开所有的锁,所以答案为 4 。
示例 2:
输入:strength = [2,5,4]
输出:6
解释:
| 时间 | 能量 | X | 操作 | 更新后的 X |
|---|---|---|---|---|
| 0 | 0 | 1 | 什么也不做 | 1 |
| 1 | 1 | 1 | 什么也不做 | 1 |
| 2 | 2 | 1 | 打开第 1 把锁 | 2 |
| 3 | 2 | 2 | 什么也不做 | 2 |
| 4 | 4 | 2 | 打开第 3 把锁 | 3 |
| 5 | 3 | 3 | 什么也不做 | 3 |
| 6 | 6 | 3 | 打开第 2 把锁 | 4 |
无法用少于 6 分钟打开所有的锁,所以答案为 6。
提示:
n == strength.length1 <= n <= 801 <= strength[i] <= 106n == strength.length
分析
#1
- 看作 n 个锁和开锁顺序 [0,n-1] 之间的二分图,问题转为求二分图最大权完美匹配
- 可以用最小费用最大流
|
|
2411 ms
#2
- 用匈牙利算法更快
解答
|
|
399 ms