我在测试一些网站时遇到了以下问题:
约翰和玛丽创办了J& M出版社并购买了两台旧打印机 装备它。现在他们有了他们的第一个商业交易 - 打印一个 由N页组成的文件。看来打印机工作在 不同的速度。一个在X秒内生成一个页面,另一个生成页面 Y秒。所以现在公司创始人对他们的最短时间感到好奇 可以花两个打印机打印整个文档。
(取自http://codeabbey.com/index/task_view/two-printers)
我认为这是贪婪算法的问题,但是它被告知N可能高达十亿,所以可能有一些我看不到的更简单的解决方案。我能不能以某种方式将它们按比例分配给X和Y?
答案 0 :(得分:2)
这似乎是一个数学问题,而不是算法问题。作业分配为YN/(X+Y)
页面到X
,XN/(X+Y)
页面到Y
。总时间XYN/(X+Y)
是最佳的(请注意,它等同于N/(1/X + 1/Y)
。由于YN/(X+Y)
可能不是整数,因此您只需计算一些值(如果X
向上舍入,Y
向下舍入,反之亦然),然后采取最小值。或者如你所说,你可以向下舍入并将任何剩余的作业提供给更快的机器。
答案 1 :(得分:0)
for i in range(int(input())):
x,y,n = list(map(float, input().split()))
x_1 = int(y*n / (x+y))
y_1 = int(x*n/ (x+y))
n = n - (x_1 + y_1)
x_ans = int(max( (x_1 + n)* x, y_1 * y))
y_ans = int(max( x_1 * x, (y_1 + n) * y))
print(min(x_ans,y_ans),end=' ')