腾讯,秋招算法笔试,第三题:杂货店冰淇淋个数
小明开了个店,冰淇淋有 n 个配料, 店里每个配料的 原材料 数量为 wi ,每个 原材料在商店的价格为 vi, 小明有 m 元钱, 问 可以最多做多少冰淇淋
第一种方法 暴力求解 AC 40%
if __name__ == "__main__":
n, m = [int(x) for x in input().strip().split(' ')]
w = [int(x) for x in input().strip().split(' ')]
v = [int(x) for x in input().strip().split(' ')]
cnt = min(w)
for i in range(n):
w[i] -= cnt
while m > 0:
for i in range(n):
if w[i] == 0:
m -= v[i]
else:
w[i] -= 1
cnt += 1
if m == 0:
print(cnt)
else: print(cnt-1) 第二种方法,二分查找
def cost(num, w, v):
price = 0
for i in range(n):
if w[i] > num:
continue
price += v[i]*(num-w[i])
return price
if __name__ == "__main__":
n, m = [int(x) for x in input().strip().split(' ')]
w = [int(x) for x in input().strip().split(' ')]
v = [int(x) for x in input().strip().split(' ')]
l = min(w)
r = 1 + m//sum(v) + max(w)
while l < r:
mid = (l + r + 1) >> 1
if cost(mid, w, v) < m:
l = mid
else:
r = mid-1
print(l) 刚才是写程序 右边界的初始值 有问题, 所以 样例通过70% 现在把代码 改了下 应该通过 100%
#腾讯##笔试题目#