假设我们有一个数字n代表n个人,并且有两个相同的投票机。我们还有一个名为time的数组,大小为n,因此time [i]表示第i个人在任何机器上投票所花费的总时间。在一瞬间,两台机器上只有一个人可以在那里。我们还有另一个值x,代表机器可操作的最大允许时间,我们必须检查所有人是否都可以投票。
因此,如果输入像n = 3,x = 7,时间= [3,5,3],那么输出将为True。因为在时间t0,第0个人去了第一台机器,而第一个人去了第二台机器。现在,在时间t3,第一台机器是免费的。现在第二个人去第一台机器,在时间t5第二台机器是免费的,在时间t6第一台机器是免费的,所以所有参与者都及时投票。
为了解决这个问题,我们将遵循以下步骤-
total_sum:=时间的所有元素之和
如果total_sum <= x,则
返回True
排序列表时间
prev_sum:=与时间大小相同的数组,并用0填充
prev_sum [0]:=时间[0]
对于范围1至prev_sum大小的i,执行
prev_sum [i]:= prev_sum [i-1] +时间[i]
对于范围在0至prev_sum大小的i,执行
temp_sum:= prev_sum [i] +(总和-prev_sum [j])
如果temp_sum <= x且total_sum-temp_sum <= x,则
返回True
对于范围i + 1至prev_sum-1的j
返回False
让我们看下面的实现以更好地理解-
def solve(n, x, time): total_sum = sum(time) if total_sum <= x: return True time.sort() prev_sum = [0 for i in range(len(time))] prev_sum[0] = time[0] for i in range(1, len(prev_sum)): prev_sum[i] = prev_sum[i - 1] + time[i] for i in range(0, len(prev_sum)): for j in range(i + 1, len(prev_sum)): temp_sum = (prev_sum[i] + (total_sum - prev_sum[j])) if temp_sum <= x and total_sum - temp_sum <= x: return True return False n = 3 x = 7 time = [3, 5, 3] print(solve(n, x, time))
3, 7, [3, 5, 3]输出结果
True