直飞面试经历 |第 19 组(第一轮问题)
问题1)问题陈述
您从事食品物流业务。你有 N 个水壶,每个都有无限容量。最初,每个罐子正好包含 1 升果汁。您想将这些水壶运送到送货地点,但一次只能运送 K 个水壶。你不想浪费任何果汁,也不想多跑一次,所以你决定重新分配罐子里的东西,直到你最终得到不超过 K 个非空罐子。
您只能使用以下方法重新分配果汁。首先,选择两个装有等量果汁的罐子。然后,将其中一个罐子的全部内容倒入另一个罐子中。根据需要多次重复此过程。
由于这个限制,仅使用您最初拥有的 N 个水壶可能无法最终得到不超过 K 个非空水壶。幸运的是,您还可以购买更多的水壶。您购买的每个水壶将恰好包含 1 升果汁,并且容量不受限制。例如,考虑 N 为 3 且 K 为 1 的情况。从 3 个罐子到 1 个罐子是不可能的。如果将一个罐子倒进另一个罐子,最终会得到一个 2 升的罐子和一个 1 升的罐子。到时候,你就卡住了。但是,如果您随后购买另一个水壶,您可以将该水壶倒入 1 升的水壶中,然后将所得的 2 升水壶倒入另一个 2 升的水壶中,最后只剩下一个 4 升的水壶。
退还您为实现目标而必须购买的最少额外水壶数量。如果不可能,则返回 -1。
约束
– N 将介于 1 和 10^7 之间,包括 1 和 10^7。
– K 将介于 1 和 1000 之间,包括 1 和 1000。
例子
1)
输入
3
1
输出
1
(问题陈述中的示例。)
2)
输入
13
2
输出
3
(如果你有 13、14 或 15 个水壶,你就不能得到一两个水壶。如果你有 16 个水壶,你可以得到一个水壶。)
3)
输入
1000000
5
输出
15808
问题 2)
问题描述:Rahul 刚刚完成学业,即将进入大学。幸运的是,他可以选择在大学学习 2 门课程。 A和B是课程的名称,当然长度相同。 A 和 B 都有 N 个子过程,其中 A[i], B[i] 分别代表 A 和 B 的第 i 个子过程。
每个子课程都有一定的相关费用,如果您学习该子课程,您将必须支付相同的费用。修完几门子课程后,您将累积您学习的所有子课程的费用。
您的最大跳转长度为 K 即,从 A[i] 您可以向前跳转到 A[i+1] 或 A[i+2] ... 或 A[i+K],而无需按顺序学习任何子课程减少您的费用。
您也可以跳过课程 A 和 B,但更改课程会受到额外的惩罚 P。例如,您可以从 A[i] 切换到 B[i+1] 或 B[i+2] ... 或 B[i+K],但需要额外支付 P 以及您学习的子课程的费用。您也可以从 B 课程跳到 A 课程,这也会产生额外的罚款 P 以及您学习的子课程的费用。
请注意,从每个子课程中您只能向前跳。您的最终费用将是您学习的所有子课程的费用加上您切换课程的次数的 P 倍。
您可以从 A[1] 或 B[1] 开始,并应达到 A[N] 或 B[N] 最小化途中累积的费用。找出您将累积的最低费用。
输入
输入中的第一行等于 T,即测试用例的数量。然后是T测试用例的描述。每个测试用例的第一行有三个整数 N,两个课程中的子课程数,K,最大跳跃长度,P,切换课程的惩罚。在每个测试用例的第二行有 N 个整数,其中第 i 个整数表示子课程 A[i] 的费用。在每个测试的第三行有 N 个整数,其中第 i 个整数代表子课程 B[i] 的费用。
输出
对于每个测试用例,输出一行,其中包含您可以在学习路径上累积的最低费用,从 { A[1] 或 B[1] } 开始,到 { A[N] 或 B[N] } 结束。
约束
1 <= T <= 10
1 <= N <= 1000
0 <= P <= 1000
1 <= K <= N
0 <= A[i], B[i] <= 1000
例子
输入:
6
4 1 0
1 2 3 4
1 2 3 4
4 1 0
1 2 3 4
4 3 2 1
4 2 0
1 2 3 4
4 3 2 1
4 1 10
1 2 3 4
4 3 2 1
4 2 10
1 2 3 4
4 3 2 1
5 1 50
0 0 102 104 0
101 103 0 0 105
输出:
10
6
4
10
7
100
解释
示例测试用例 1。
两门课程相同,跳跃长度为1,因此您需要访问单个课程的所有子课程
最小路径:A[1]、A[2]、A[3]、A[4]
因此,第一个测试用例的答案是 10。
示例测试用例 2。
A 最初具有较小的值,然后 B 具有较小的值。所以从A开始跳到B是最优的
最小路径:A[1]、A[2]、B[3]、B[4]
因此,第二个测试用例的答案是 6。
示例测试用例 3。
最小路径:A[1]、B[3]、B[4]
因此,第三个测试用例的答案是 4。
示例测试用例 4。
最小路径:A[1]、A[2]、A[3]、A[4]
我们不会转换课程,因为转换的惩罚非常高。因此,第四个测试用例的答案是 10。
示例测试用例 5。
最小路径:A[1]、A[2]、A[4]
因此,第五个测试用例的答案是 7。
示例测试用例 6。
最小路径:A[1]、A[2]、B[3]、B[4]、A[6]
因此,第六个测试用例的答案是 100。请注意最佳情况可能需要您多次切换课程。
祝一切顺利! 🙂