一家软件公司中有N个团队。第 i th 团队中有B i 名员工,总预算为A i 个货币单位。每个团队必须将预算平均分配给员工。但是对于某些团队来说,这是不可能的。因此,公司必须在其团队的预算中进行修改。在一个修订版本中,要修订 i th 团队的预算,前i个团队的预算必须增加1。您的任务是找到最小修订版本因此,对于每个团队来说,可以在员工之间平均分配预算。
示例案例:(A 1 B 1 ),(A 2 B 2 ),(A 3 B 3 ):(1 1),(3 7),(5 4)。
解决方案为 4 。初始预算(1,3,5)->(2,4,5)->(5,7,8)
答案 0 :(得分:2)
给定的问题可以通过建设性的解决方案来解决。首先,让我们 inc i 表示每个 A i 要增加的金额,使得总和( A i + inc i )可以在 B i 员工。这里要进行的两个观察是:
使用这两个观察结果,我们可以从从右到左开始遍历给定数组,并在每一步确定 inc i 的值。 inc i 的值应为( c * B i -A i ),其中 c 是最小的整数值,使得 c * B i > = A i 和(< em> c * B i -A i )> = inc i + 1 值可以在O(1)中计算,因为我们可以对方程进行改革以估计 c ,-
的值因此 c = max (ceil(A i / B i < / sub>),ceil((A i + inc i + 1 )/ B i )
因此,给定解决方案的整体复杂度为 O(n),最终解决方案是 inc 1 的值(假设1 -索引)